Files
MapLibreParticleLab/platform/darwin/src/NSComparisonPredicate+MGLAdditions.mm
2016-12-01 08:57:41 -08:00

102 lines
4.1 KiB
Plaintext

#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