summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFabian Guerra <fabian.guerra@mapbox.com>2018-03-07 16:53:17 -0500
committerFabian Guerra <fabian.guerra@mapbox.com>2018-03-14 19:47:00 -0400
commit188e5279491010d020573d433e8fbd189597f153 (patch)
treec4a5e2385ac01f1514dad2d530e1d81c8362cd7d
parent0ccfbd0cce519a494ef38b01ebe61a40a745c325 (diff)
downloadqtlocation-mapboxgl-188e5279491010d020573d433e8fbd189597f153.tar.gz
[ios, macos] Update NSExpression additions constructors to support expressionForFunction:selectorName:arguments
-rw-r--r--platform/darwin/src/NSExpression+MGLAdditions.h42
-rw-r--r--platform/darwin/src/NSExpression+MGLAdditions.mm50
2 files changed, 68 insertions, 24 deletions
diff --git a/platform/darwin/src/NSExpression+MGLAdditions.h b/platform/darwin/src/NSExpression+MGLAdditions.h
index df8129811d..9b74460e47 100644
--- a/platform/darwin/src/NSExpression+MGLAdditions.h
+++ b/platform/darwin/src/NSExpression+MGLAdditions.h
@@ -117,7 +117,35 @@ extern MGL_EXPORT const MGLExpressionInterpolationMode MGLExpressionInterpolatio
*/
+ (instancetype)mgl_expressionForValue:(nonnull NSValue *)value;
-+ (instancetype)mgl_expressionForTernaryFunction:(nonnull NSString *)conditionString trueExpression:(nonnull NSExpression *)trueExpression falseExpresssion:(nonnull NSExpression *)falseExpression;
+/**
+ Returns a conditional function expression specifying the string predicate, and
+ colors for each condition.
+
+ @param conditionPredicate The predicate to get evaluated.
+ @param trueColor The color for conditions equal to true.
+ @param falseColor The color value if the condition is equal to false.
+ */
++ (instancetype)mgl_expressionForConditional:(nonnull NSString *)conditionPredicate trueColor:(nonnull MGLColor*)trueColor falseColor:(nonnull MGLColor *)falseColor;
+
+/**
+ Returns a conditional function expression specifying the string predicate, and
+ values for each condition.
+
+ @param conditionPredicate The predicate to get evaluated.
+ @param trueValue The value for conditions equal to true.
+ @param falseValue The value for conditions equal to false.
+ */
++ (instancetype)mgl_expressionForConditional:(nonnull NSString *)conditionPredicate trueValue:(nonnull NSValue *)trueValue falseValue:(nonnull NSValue *)falseValue;
+
+/**
+ Returns a conditional function expression specifying the string predicate, and
+ expressions for each condition.
+
+ @param conditionPredicate The predicate to get evaluated.
+ @param trueExpression The expression for conditions equal to true.
+ @param falseExpression The expression for conditions equal to false.
+ */
++ (instancetype)mgl_expressionForConditional:(nonnull NSString *)conditionPredicate trueExpression:(nonnull NSExpression *)trueExpression falseExpresssion:(nonnull NSExpression *)falseExpression;
/**
Returns a step function expression specifying the function operator, default value
@@ -143,11 +171,11 @@ extern MGL_EXPORT const MGLExpressionInterpolationMode MGLExpressionInterpolatio
Returns a step function expression specifying the function operator, default expression
and stops.
- @param function The operator type in which this expression is applied.
+ @param operatorExpression The operator expression.
@param expression The expression which could be a constant or function expression.
@param stops The stops dictionay must be numeric literals in strictly ascending order.
*/
-+ (instancetype)mgl_expressionForStepFunction:(nonnull MGLExpressionStyleFunction)function defaultExpression:(nonnull NSExpression *)expression stops:(nonnull NS_DICTIONARY_OF(NSNumber *, id) *)stops;
++ (instancetype)mgl_expressionForStepFunction:(nonnull NSExpression*)operatorExpression defaultExpression:(nonnull NSExpression *)expression stops:(nonnull NSExpression*)stops;
/**
Returns an interpolated function expression specifying the function operator, curve type
@@ -157,7 +185,7 @@ extern MGL_EXPORT const MGLExpressionInterpolationMode MGLExpressionInterpolatio
@param curveType The curve type could be `MGLExpressionInterpolationModeLinear`,
`MGLExpressionInterpolationModeExponential` and
`MGLExpressionInterpolationModeCubicBezier`.
- @param steps The stops dictionay must be numeric literals in strictly ascending order.
+ @param steps The steps dictionay must be numeric literals in strictly ascending order.
*/
+ (instancetype)mgl_expressionForInterpolateFunction:(nonnull MGLExpressionStyleFunction)function curveType:(nonnull MGLExpressionInterpolationMode)curveType steps:(nonnull NS_DICTIONARY_OF(NSNumber *, id) *)steps;
@@ -165,14 +193,14 @@ extern MGL_EXPORT const MGLExpressionInterpolationMode MGLExpressionInterpolatio
Returns an interpolated function expression specifying the function operator, curve type,
parameters and steps.
- @param function The operator type in which this expression is applied.
+ @param expressionOperator The expression operator.
@param curveType The curve type could be `MGLExpressionInterpolationModeLinear`,
`MGLExpressionInterpolationModeExponential` and
`MGLExpressionInterpolationModeCubicBezier`.
@param parameters The parameters expression.
- @param steps The stops dictionay must be numeric literals in strictly ascending order.
+ @param steps The steps expression.
*/
-+ (instancetype)mgl_expressionForInterpolateFunction:(nonnull MGLExpressionStyleFunction)function curveType:(nonnull MGLExpressionInterpolationMode)curveType parameters:(nullable NSExpression *)parameters steps:(nonnull NS_DICTIONARY_OF(NSNumber *, id) *)steps;
++ (instancetype)mgl_expressionForInterpolateFunction:(nonnull NSExpression*)expressionOperator curveType:(nonnull MGLExpressionInterpolationMode)curveType parameters:(nullable NSExpression *)parameters steps:(nonnull NSExpression*)steps;
/**
Returns a string constant expression appending the passed string.
diff --git a/platform/darwin/src/NSExpression+MGLAdditions.mm b/platform/darwin/src/NSExpression+MGLAdditions.mm
index ed501d0e18..a7a2f0e1bb 100644
--- a/platform/darwin/src/NSExpression+MGLAdditions.mm
+++ b/platform/darwin/src/NSExpression+MGLAdditions.mm
@@ -305,7 +305,7 @@ NSArray *MGLSubexpressionsWithJSONObjects(NSArray *objects) {
}
+ (instancetype)mgl_expressionForString:(NSString *)string {
- return [NSExpression expressionForConstantValue:string];
+ return [NSExpression expressionWithFormat:string];
}
+ (instancetype)mgl_expressionForColor:(MGLColor *)color {
@@ -315,41 +315,57 @@ NSArray *MGLSubexpressionsWithJSONObjects(NSArray *objects) {
return [NSExpression expressionForConstantValue:value];
}
-+ (instancetype)mgl_expressionForTernaryFunction:(NSString *)conditionString trueExpression:(NSExpression *)trueExpression falseExpresssion:(NSExpression *)falseExpression {
- NSString *funtionFormat = [NSString stringWithFormat:@"TERNARY(%@, %%@, %%@)", conditionString];
- return [NSExpression expressionWithFormat:funtionFormat, trueExpression, falseExpression];
++ (instancetype)mgl_expressionForConditional:(nonnull NSString *)conditionPredicate trueColor:(nonnull MGLColor*)trueColor falseColor:(nonnull MGLColor *)falseColor {
+ return [NSExpression mgl_expressionForConditional:conditionPredicate
+ trueExpression:[NSExpression mgl_expressionForColor:trueColor]
+ falseExpresssion:[NSExpression mgl_expressionForColor:falseColor]];
+}
+
++ (instancetype)mgl_expressionForConditional:(nonnull NSString *)conditionPredicate trueValue:(nonnull NSValue *)trueValue falseValue:(nonnull NSValue *)falseValue {
+ return [NSExpression mgl_expressionForConditional:conditionPredicate
+ trueExpression:[NSExpression mgl_expressionForValue:trueValue]
+ falseExpresssion:[NSExpression mgl_expressionForValue:falseValue]];
+}
+
++ (instancetype)mgl_expressionForConditional:(nonnull NSString *)conditionPredicate trueExpression:(nonnull NSExpression *)trueExpression falseExpresssion:(nonnull NSExpression *)falseExpression {
+ NSPredicate *conditional = [NSPredicate predicateWithFormat:conditionPredicate];
+ return [NSExpression expressionForConditional:conditional trueExpression:trueExpression falseExpression:falseExpression];
}
+ (instancetype)mgl_expressionForStepFunction:(MGLExpressionStyleFunction)function defaultValue:(NSValue *)value stops:(nonnull NS_DICTIONARY_OF(NSNumber *, id) *)stops {
- return [NSExpression mgl_expressionForStepFunction:function
+ return [NSExpression mgl_expressionForStepFunction:[NSExpression mgl_expressionForString:function]
defaultExpression:[NSExpression mgl_expressionForValue:value]
- stops:stops];
+ stops:[NSExpression expressionWithFormat:@"%@", stops]];
}
+ (instancetype)mgl_expressionForStepFunction:(MGLExpressionStyleFunction)function defaultString:(NSString *)string stops:(nonnull NS_DICTIONARY_OF(NSNumber *, id) *)stops {
- return [NSExpression mgl_expressionForStepFunction:function
+ return [NSExpression mgl_expressionForStepFunction:[NSExpression mgl_expressionForString:function]
defaultExpression:[NSExpression mgl_expressionForString:string]
- stops:stops];
+ stops:[NSExpression expressionWithFormat:@"%@", stops]];
}
+ (instancetype)mgl_expressionForStepFunction:(MGLExpressionStyleFunction)function defaultColor:(MGLColor *)color stops:(nonnull NS_DICTIONARY_OF(NSNumber *, id) *)stops {
- return [NSExpression mgl_expressionForStepFunction:function
+ return [NSExpression mgl_expressionForStepFunction:[NSExpression mgl_expressionForString:function]
defaultExpression:[NSExpression mgl_expressionForColor:color]
- stops:stops];
+ stops:[NSExpression expressionWithFormat:@"%@", stops]];
}
-+ (instancetype)mgl_expressionForStepFunction:(MGLExpressionStyleFunction)function defaultExpression:(NSExpression *)expression stops:(nonnull NS_DICTIONARY_OF(NSNumber *, id) *)stops {
- NSString *functionFormat = [NSString stringWithFormat:@"FUNCTION(%@, 'mgl_stepWithMinimum:stops:', %%@, %%@, %%@)", function];
- return [NSExpression expressionWithFormat:functionFormat, expression, stops];
++ (instancetype)mgl_expressionForStepFunction:(NSExpression *)operatorExpression defaultExpression:(NSExpression *)expression stops:(nonnull NS_DICTIONARY_OF(NSNumber *, id) *)stops {
+ return [NSExpression expressionForFunction:operatorExpression selectorName:@"mgl_stepWithMinimum:stops:" arguments:@[expression, stops]];
}
+ (instancetype)mgl_expressionForInterpolateFunction:(MGLExpressionStyleFunction)function curveType:(nonnull MGLExpressionInterpolationMode)curveType steps:(nonnull NS_DICTIONARY_OF(NSNumber *, id) *)steps; {
- return [NSExpression mgl_expressionForInterpolateFunction:function curveType:curveType parameters:nil steps:steps];
+ return [NSExpression mgl_expressionForInterpolateFunction:[NSExpression mgl_expressionForString:function]
+ curveType:curveType
+ parameters:nil
+ steps:[NSExpression expressionWithFormat:@"%@", steps]];
}
-+ (instancetype)mgl_expressionForInterpolateFunction:(MGLExpressionStyleFunction)function curveType:(nonnull MGLExpressionInterpolationMode)curveType parameters:(nullable NSExpression *)parameters steps:(nonnull NS_DICTIONARY_OF(NSNumber *, id) *)steps {
- NSString *functionFormat = [NSString stringWithFormat:@"FUNCTION(%@, 'mgl_interpolateWithCurveType:parameters:stops:', %%@, %%@, %%@)", function];
- return [NSExpression expressionWithFormat:functionFormat, curveType, parameters, steps];
++ (instancetype)mgl_expressionForInterpolateFunction:(nonnull NSExpression*)expressionOperator curveType:(nonnull MGLExpressionInterpolationMode)curveType parameters:(nullable NSExpression *)parameters steps:(nonnull NSExpression*)steps {
+ NSExpression *sanitizeParams = parameters ? parameters : [NSExpression expressionWithFormat:@"%@", parameters];
+ return [NSExpression expressionForFunction:expressionOperator
+ selectorName:@"mgl_interpolateWithCurveType:parameters:stops:"
+ arguments:@[[NSExpression expressionForConstantValue:curveType], sanitizeParams, steps]];
}