blob: 19c264aa40ae415de51d4b50193686b160790ece (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
|
#import "NSComparisonPredicate+MGLAdditions.h"
#import "NSPredicate+MGLAdditions.h"
#import "NSExpression+MGLAdditions.h"
@implementation NSComparisonPredicate (MGLAdditions)
- (mbgl::style::Filter)mgl_filter
{
switch (self.predicateOperatorType) {
case NSEqualToPredicateOperatorType: {
if (self.rightExpression.constantValue)
{
auto filter = mbgl::style::EqualsFilter();
filter.key = self.leftExpression.keyPath.UTF8String;
filter.value = self.rightExpression.mgl_filterValue;
return filter;
}
else
{
auto filter = mbgl::style::NotHasFilter();
filter.key = self.leftExpression.keyPath.UTF8String;
return filter;
}
}
case NSNotEqualToPredicateOperatorType: {
if (self.rightExpression.constantValue)
{
auto filter = mbgl::style::NotEqualsFilter();
filter.key = self.leftExpression.keyPath.UTF8String;
filter.value = self.rightExpression.mgl_filterValue;
return filter;
}
else
{
auto filter = mbgl::style::HasFilter();
filter.key = self.leftExpression.keyPath.UTF8String;
return filter;
}
}
case NSGreaterThanPredicateOperatorType: {
auto filter = mbgl::style::GreaterThanFilter();
filter.key = self.leftExpression.keyPath.UTF8String;
filter.value = self.rightExpression.mgl_filterValue;
return filter;
}
case NSGreaterThanOrEqualToPredicateOperatorType: {
auto filter = mbgl::style::GreaterThanEqualsFilter();
filter.key = self.leftExpression.keyPath.UTF8String;
filter.value = self.rightExpression.mgl_filterValue;
return filter;
}
case NSLessThanPredicateOperatorType: {
auto filter = mbgl::style::LessThanFilter();
filter.key = self.leftExpression.keyPath.UTF8String;
filter.value = self.rightExpression.mgl_filterValue;
return filter;
}
case NSLessThanOrEqualToPredicateOperatorType: {
auto filter = mbgl::style::LessThanEqualsFilter();
filter.key = self.leftExpression.keyPath.UTF8String;
filter.value = self.rightExpression.mgl_filterValue;
return filter;
}
case NSInPredicateOperatorType: {
auto filter = mbgl::style::InFilter();
filter.key = self.leftExpression.keyPath.UTF8String;
filter.values = self.rightExpression.mgl_filterValues;
return filter;
}
case NSContainsPredicateOperatorType: {
auto filter = mbgl::style::InFilter();
filter.key = [self.rightExpression.constantValue UTF8String];
filter.values = self.leftExpression.mgl_filterValues;
return filter;
}
case NSBetweenPredicateOperatorType: {
auto filter = mbgl::style::AllFilter();
auto gteFilter = mbgl::style::GreaterThanEqualsFilter();
gteFilter.key = self.leftExpression.keyPath.UTF8String;
gteFilter.value = self.rightExpression.mgl_filterValues[0];
filter.filters.push_back(gteFilter);
auto lteFilter = mbgl::style::LessThanEqualsFilter();
lteFilter.key = self.leftExpression.keyPath.UTF8String;
lteFilter.value = self.rightExpression.mgl_filterValues[1];
filter.filters.push_back(lteFilter);
return filter;
}
case NSMatchesPredicateOperatorType:
case NSLikePredicateOperatorType:
case NSBeginsWithPredicateOperatorType:
case NSEndsWithPredicateOperatorType:
case NSCustomSelectorPredicateOperatorType:
[NSException raise:@"Unsupported operator type"
format:@"NSPredicateOperatorType:%lu is not supported.", (unsigned long)self.predicateOperatorType];
}
return {};
}
@end
|