execute method
The iterable, nested function that evaluates the entire FHIRPath expression one object at a time
Implementation
@override
List execute(List results, Map<String, dynamic> passed) {
final executedBefore = before.execute(results.toList(), passed);
final executedAfter = after.execute(results.toList(), passed);
if (executedBefore.isEmpty || executedAfter.isEmpty) {
return [];
} else if (executedBefore.length != 1 || executedAfter.length != 1) {
throw FhirPathEvaluationException(
'Math Operators require each operand to result in a '
'single object. The "mod" operator was passed the following:\n'
'Operand 1: $executedBefore\n'
'Operand 2: $executedAfter',
operation: 'mod',
collection: results);
} else if (executedAfter.first is num && executedAfter.first == 0) {
return [];
} else if (executedBefore.first is num && executedAfter.first is num) {
return [executedBefore.first % executedAfter.first];
} else if (executedBefore.first is FhirPathQuantity &&
executedAfter.first is FhirPathQuantity) {
return [
(executedBefore.first as FhirPathQuantity) %
(executedAfter.first as FhirPathQuantity)
];
} else {
throw FhirPathEvaluationException(
'The "mod" operator only accepts Integers, Decimals and '
'Quantities, but was passed the following:\n'
'Operand 1: ${executedBefore.first} (${executedBefore.first.runtimeType})\n'
'Operand 2: ${executedAfter.first} (${executedAfter.first.runtimeType})',
operation: 'mod',
collection: results);
}
}