diff options
author | Minh Nguyễn <mxn@1ec5.org> | 2016-12-26 15:07:43 -0800 |
---|---|---|
committer | Minh Nguyễn <mxn@1ec5.org> | 2017-01-04 08:52:41 -0800 |
commit | aef36956ee062ea2992c43d658cebf52954b5213 (patch) | |
tree | a16dd7677374ff128fd0f0e50564e4027a4f4607 /platform/darwin/src/NSExpression+MGLAdditions.mm | |
parent | e6132d248b54d202c3fa132b3084660a0bbe3c06 (diff) | |
download | qtlocation-mapboxgl-aef36956ee062ea2992c43d658cebf52954b5213.tar.gz |
[ios, macos] Cleaned up expression conversion
Diffstat (limited to 'platform/darwin/src/NSExpression+MGLAdditions.mm')
-rw-r--r-- | platform/darwin/src/NSExpression+MGLAdditions.mm | 60 |
1 files changed, 25 insertions, 35 deletions
diff --git a/platform/darwin/src/NSExpression+MGLAdditions.mm b/platform/darwin/src/NSExpression+MGLAdditions.mm index 97f3e11dba..f11a1919cf 100644 --- a/platform/darwin/src/NSExpression+MGLAdditions.mm +++ b/platform/darwin/src/NSExpression+MGLAdditions.mm @@ -2,31 +2,25 @@ @implementation NSExpression (MGLAdditions) -- (std::vector<mbgl::Value>)mgl_filterValues -{ +- (std::vector<mbgl::Value>)mgl_aggregateMBGLValue { if ([self.constantValue isKindOfClass:[NSArray class]] || [self.constantValue isKindOfClass:[NSSet class]]) { std::vector<mbgl::Value> convertedValues; - for (id item in self.constantValue) { - id constantValue = item; - if ([item isKindOfClass:[NSExpression class]]) { - constantValue = [constantValue constantValue]; + for (id value in self.constantValue) { + NSExpression *expression = value; + if (![expression isKindOfClass:[NSExpression class]]) { + expression = [NSExpression expressionForConstantValue:expression]; } - convertedValues.push_back([self mgl_convertedValueWithValue:constantValue]); + convertedValues.push_back(expression.mgl_constantMBGLValue); } return convertedValues; } [NSException raise:NSInvalidArgumentException format:@"Constant value expression must contain an array or set."]; - return { }; -} - -- (mbgl::Value)mgl_filterValue -{ - return [self mgl_convertedValueWithValue:self.constantValue]; + return {}; } -- (mbgl::Value)mgl_convertedValueWithValue:(id)value -{ +- (mbgl::Value)mgl_constantMBGLValue { + id value = self.constantValue; if ([value isKindOfClass:NSString.class]) { return { std::string([(NSString *)value UTF8String]) }; } else if ([value isKindOfClass:NSNumber.class]) { @@ -66,30 +60,26 @@ [NSException raise:NSInvalidArgumentException format:@"Can’t convert %s:%@ to mbgl::Value", [value objCType], value]; } - return { }; + return {}; } -- (mbgl::FeatureIdentifier)mgl_featureIdentifier -{ - id value = self.constantValue; - mbgl::Value mbglValue = [self mgl_filterValue]; +- (mbgl::FeatureIdentifier)mgl_featureIdentifier { + mbgl::Value mbglValue = self.mgl_constantMBGLValue; - if ([value isKindOfClass:NSString.class]) { + if (mbglValue.is<std::string>()) { return mbglValue.get<std::string>(); - } else if ([value isKindOfClass:NSNumber.class]) { - NSNumber *number = (NSNumber *)value; - if ((strcmp([number objCType], @encode(char)) == 0) || - (strcmp([number objCType], @encode(BOOL)) == 0)) { - return mbglValue.get<bool>(); - } else if ( strcmp([number objCType], @encode(double)) == 0 || - strcmp([number objCType], @encode(float)) == 0) { - return mbglValue.get<double>(); - } else if ([number compare:@(0)] == NSOrderedDescending || - [number compare:@(0)] == NSOrderedSame) { - return mbglValue.get<uint64_t>(); - } else if ([number compare:@(0)] == NSOrderedAscending) { - return mbglValue.get<int64_t>(); - } + } + if (mbglValue.is<bool>()) { + return mbglValue.get<bool>(); + } + if (mbglValue.is<double>()) { + return mbglValue.get<double>(); + } + if (mbglValue.is<uint64_t>()) { + return mbglValue.get<uint64_t>(); + } + if (mbglValue.is<int64_t>()) { + return mbglValue.get<int64_t>(); } return {}; |