evaluate method
Evaluates this expression according to given type and context.
Implementation
@override
dynamic evaluate(EvaluationType type, ContextModel context) {
if (type == EvaluationType.VECTOR) {
// XXX Support for vectors in vectors
final EvaluationType elementType = EvaluationType.REAL;
if (length == 1) {
// Does not seem to be a vector, try to return REAL.
return elements[0].evaluate(elementType, context);
}
// Interpret vector elements as REAL.
if (length == 2) {
double x, y;
x = elements[0].evaluate(elementType, context);
y = elements[1].evaluate(elementType, context);
return Vector2(x, y);
}
if (length == 3) {
double x, y, z;
x = elements[0].evaluate(elementType, context);
y = elements[1].evaluate(elementType, context);
z = elements[2].evaluate(elementType, context);
return Vector3(x, y, z);
}
if (length == 4) {
double x, y, z, w;
x = elements[0].evaluate(elementType, context);
y = elements[1].evaluate(elementType, context);
z = elements[2].evaluate(elementType, context);
w = elements[3].evaluate(elementType, context);
return Vector4(x, y, z, w);
}
if (length > 4) {
throw UnimplementedError(
'Vector of arbitrary length (> 4) are not supported yet.');
}
}
if (type == EvaluationType.REAL && length == 1) {
// Interpret vector as real number.
return elements[0].evaluate(type, context);
}
throw UnsupportedError(
'Vector $this with length $length can not be interpreted as: $type');
}