summaryrefslogtreecommitdiff
path: root/platform/darwin/src/NSExpression+MGLAdditions.mm
diff options
context:
space:
mode:
authorFredrik Karlsson <bjorn.fredrik.karlsson@gmail.com>2016-08-17 13:38:02 +0200
committerFredrik Karlsson <bjorn.fredrik.karlsson@gmail.com>2016-09-02 22:42:05 +0200
commitd77a13eb7320722c48c8a18240adf99615c4b85f (patch)
tree1017781b310e434f943e4ad38b57f319ad7a3a58 /platform/darwin/src/NSExpression+MGLAdditions.mm
parent6a39cf5aaece81c7a531b12321dd503004cc45b8 (diff)
downloadqtlocation-mapboxgl-d77a13eb7320722c48c8a18240adf99615c4b85f.tar.gz
[ios] Added support for filters (NSPredicate)
[ios, macos] cleaned up filters [ios] added a filter example [ios] utest filters [ios, macos] nested predicates [ios] refactored [ios] filter -> NSPredicate [ios] fixed mbgl::Any/AllFilter -> NSPredicate [ios] translate nested mbgl::NotIn filters [ios] cleanup and added more utests [ios] fixed a bug in the None filter conversion and improved utests [ios, macos] doc [macos] added missing category [ios, macos] additional utests [ios, macos] updated documentation
Diffstat (limited to 'platform/darwin/src/NSExpression+MGLAdditions.mm')
-rw-r--r--platform/darwin/src/NSExpression+MGLAdditions.mm43
1 files changed, 43 insertions, 0 deletions
diff --git a/platform/darwin/src/NSExpression+MGLAdditions.mm b/platform/darwin/src/NSExpression+MGLAdditions.mm
new file mode 100644
index 0000000000..5f1a1e765a
--- /dev/null
+++ b/platform/darwin/src/NSExpression+MGLAdditions.mm
@@ -0,0 +1,43 @@
+#import "NSExpression+MGLAdditions.h"
+
+@implementation NSExpression (MGLAdditions)
+
+- (std::vector<mbgl::Value>)mgl_filterValues
+{
+ if ([self.constantValue isKindOfClass:NSArray.class]) {
+ NSArray *values = self.constantValue;
+ std::vector<mbgl::Value>convertedValues;
+ for (id value in values) {
+ convertedValues.push_back([self mgl_convertedValueWithValue:value]);
+ }
+ return convertedValues;
+ }
+ [NSException raise:@"Values not handled" format:@""];
+ return { };
+}
+
+- (mbgl::Value)mgl_filterValue
+{
+ return [self mgl_convertedValueWithValue:self.constantValue];
+}
+
+- (mbgl::Value)mgl_convertedValueWithValue:(id)value
+{
+ if ([value isKindOfClass:NSString.class]) {
+ return { std::string([(NSString *)value UTF8String]) };
+ } else if ([value isKindOfClass:NSNumber.class]) {
+ NSNumber *number = (NSNumber *)value;
+ if((strcmp([number objCType], @encode(int))) == 0) {
+ return { number.intValue };
+ } else if ((strcmp([number objCType], @encode(double))) == 0) {
+ return { number.doubleValue };
+ } else if ((strcmp([number objCType], @encode(bool))) == 0) {
+ return { number.boolValue };
+ }
+ }
+ [NSException raise:@"Value not handled"
+ format:@"Can’t convert %s:%@ to mbgl::Value", [value objCType], value];
+ return { };
+}
+
+@end