diff options
Diffstat (limited to 'platform/darwin/src/NSPredicate+MGLAdditions.mm')
-rw-r--r-- | platform/darwin/src/NSPredicate+MGLAdditions.mm | 48 |
1 files changed, 24 insertions, 24 deletions
diff --git a/platform/darwin/src/NSPredicate+MGLAdditions.mm b/platform/darwin/src/NSPredicate+MGLAdditions.mm index 0ac68095f9..9fd6639b0a 100644 --- a/platform/darwin/src/NSPredicate+MGLAdditions.mm +++ b/platform/darwin/src/NSPredicate+MGLAdditions.mm @@ -4,7 +4,7 @@ class FilterEvaluator { public: - + NSArray *getPredicates(std::vector<mbgl::style::Filter> filters) { NSMutableArray *predicates = [NSMutableArray arrayWithCapacity:filters.size()]; for (auto filter : filters) { @@ -12,7 +12,7 @@ public: } return predicates; } - + NSExpression *getValues(std::vector<mbgl::Value> values) { NSMutableArray *array = [NSMutableArray arrayWithCapacity:values.size()]; for (auto value : values) { @@ -21,43 +21,43 @@ public: } return [NSExpression expressionForAggregate:array]; } - + NSPredicate *operator()(mbgl::style::NullFilter filter) { return nil; } - + NSPredicate *operator()(mbgl::style::EqualsFilter filter) { return [NSPredicate predicateWithFormat:@"%K == %@", @(filter.key.c_str()), mbgl::Value::visit(filter.value, ValueEvaluator())]; } - + NSPredicate *operator()(mbgl::style::NotEqualsFilter filter) { return [NSPredicate predicateWithFormat:@"%K != %@", @(filter.key.c_str()), mbgl::Value::visit(filter.value, ValueEvaluator())]; } - + NSPredicate *operator()(mbgl::style::GreaterThanFilter filter) { return [NSPredicate predicateWithFormat:@"%K > %@", @(filter.key.c_str()), mbgl::Value::visit(filter.value, ValueEvaluator())]; } - + NSPredicate *operator()(mbgl::style::GreaterThanEqualsFilter filter) { return [NSPredicate predicateWithFormat:@"%K >= %@", @(filter.key.c_str()), mbgl::Value::visit(filter.value, ValueEvaluator())]; } - + NSPredicate *operator()(mbgl::style::LessThanFilter filter) { return [NSPredicate predicateWithFormat:@"%K < %@", @(filter.key.c_str()), mbgl::Value::visit(filter.value, ValueEvaluator())]; } - + NSPredicate *operator()(mbgl::style::LessThanEqualsFilter filter) { return [NSPredicate predicateWithFormat:@"%K <= %@", @(filter.key.c_str()), mbgl::Value::visit(filter.value, ValueEvaluator())]; } - + NSPredicate *operator()(mbgl::style::InFilter filter) { return [NSPredicate predicateWithFormat:@"%K IN %@", @(filter.key.c_str()), getValues(filter.values)]; } - + NSPredicate *operator()(mbgl::style::NotInFilter filter) { return [NSPredicate predicateWithFormat:@"NOT %K IN %@", @(filter.key.c_str()), getValues(filter.values)]; } - + NSPredicate *operator()(mbgl::style::AnyFilter filter) { NSArray *subpredicates = getPredicates(filter.filters); if (subpredicates.count) { @@ -65,13 +65,13 @@ public: } return [NSPredicate predicateWithValue:NO]; } - + NSPredicate *operator()(mbgl::style::AllFilter filter) { // Convert [all, [>=, key, lower], [<=, key, upper]] to key BETWEEN {lower, upper} if (filter.filters.size() == 2) { auto leftFilter = filter.filters[0]; auto rightFilter = filter.filters[1]; - + std::string lowerKey; std::string upperKey; mbgl::Value lowerBound; @@ -83,7 +83,7 @@ public: lowerKey = rightFilter.get<mbgl::style::GreaterThanEqualsFilter>().key; lowerBound = rightFilter.get<mbgl::style::GreaterThanEqualsFilter>().value; } - + if (leftFilter.is<mbgl::style::LessThanEqualsFilter>()) { upperKey = leftFilter.get<mbgl::style::LessThanEqualsFilter>().key; upperBound = leftFilter.get<mbgl::style::LessThanEqualsFilter>().value; @@ -91,7 +91,7 @@ public: upperKey = rightFilter.get<mbgl::style::LessThanEqualsFilter>().key; upperBound = rightFilter.get<mbgl::style::LessThanEqualsFilter>().value; } - + if (!lowerBound.is<mbgl::NullValue>() && !upperBound.is<mbgl::NullValue>() && lowerKey == upperKey) { return [NSPredicate predicateWithFormat:@"%K BETWEEN {%@, %@}", @@ -100,14 +100,14 @@ public: mbgl::Value::visit(upperBound, ValueEvaluator())]; } } - + NSArray *subpredicates = getPredicates(filter.filters); if (subpredicates.count) { return [NSCompoundPredicate andPredicateWithSubpredicates:subpredicates]; } return [NSPredicate predicateWithValue:YES]; } - + NSPredicate *operator()(mbgl::style::NoneFilter filter) { NSArray *subpredicates = getPredicates(filter.filters); if (subpredicates.count > 1) { @@ -119,15 +119,15 @@ public: return [NSPredicate predicateWithValue:YES]; } } - + NSPredicate *operator()(mbgl::style::HasFilter filter) { return [NSPredicate predicateWithFormat:@"%K != nil", @(filter.key.c_str())]; } - + NSPredicate *operator()(mbgl::style::NotHasFilter filter) { return [NSPredicate predicateWithFormat:@"%K == nil", @(filter.key.c_str())]; } - + }; @implementation NSPredicate (MGLAdditions) @@ -138,18 +138,18 @@ public: { return mbgl::style::AllFilter(); } - + if ([self isEqual:[NSPredicate predicateWithValue:NO]]) { return mbgl::style::AnyFilter(); } - + if ([self.predicateFormat hasPrefix:@"BLOCKPREDICATE("]) { [NSException raise:NSInvalidArgumentException format:@"Block-based predicates are not supported."]; } - + [NSException raise:NSInvalidArgumentException format:@"Unrecognized predicate type."]; return {}; |