diff options
author | Fredrik Karlsson <bjorn.fredrik.karlsson@gmail.com> | 2016-08-17 13:38:02 +0200 |
---|---|---|
committer | Fredrik Karlsson <bjorn.fredrik.karlsson@gmail.com> | 2016-09-02 22:42:05 +0200 |
commit | d77a13eb7320722c48c8a18240adf99615c4b85f (patch) | |
tree | 1017781b310e434f943e4ad38b57f319ad7a3a58 /platform/darwin/src/NSExpression+MGLAdditions.mm | |
parent | 6a39cf5aaece81c7a531b12321dd503004cc45b8 (diff) | |
download | qtlocation-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.mm | 43 |
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 |