execute method

  1. @override
List execute(
  1. List results,
  2. Map<String, dynamic> passed
)
override

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 "/" operator was passed the following:\n'
        'Operand 1: $executedBefore\n'
        'Operand 2: $executedAfter',
        operation: '/',
        collection: results);
  } else if (executedBefore.first is num && executedAfter.first is num) {
    return (executedAfter.first != 0)
        ? [executedBefore.first / executedAfter.first]
        : [];
  } else if (executedBefore.first is FhirPathQuantity &&
      executedAfter.first is FhirPathQuantity) {
    return ((executedAfter.first as FhirPathQuantity).amount != 0)
        ? [
            (executedBefore.first as FhirPathQuantity) /
                (executedAfter.first as FhirPathQuantity)
          ]
        : [];
  } else {
    throw FhirPathEvaluationException(
        'The "/" 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: '/',
        collection: results);
  }
}