docs: public ExpressionDataPoint[] next(final long timestamp) {
      
      // fetch the timestamp ONCE to save some cycles.
      // final long timestamp = iterator.nextTimestamp();
      iterator.next();
      
      // set aside a couple of addresses for the variables
      double val;
      double result;
      for (int i = 0; i < iterator.getSeriesSize(); i++) {
        // this here is why life sucks. there MUST be a better way to bind variables
        for (final String variable : names) {
          if (iteration_results.get(variable)[i] == null) {
            context.set(variable, results.get(variable).getFillPolicy().getValue());
          } else {
            val = iteration_results.get(variable)[i].toDouble();
            if (Double.isNaN(val)) {
              context.set(variable, results.get(variable).getFillPolicy().getValue());
            } else {
              context.set(variable, val);
            }
          }
        }
        final Object output = expression.execute(context);
        if (output instanceof Double) {
          result = (Double) output;
        } else if (output instanceof Boolean) {
          result = (((Boolean) output) ? 1 : 0);
        } else {
          throw new IllegalStateException("Expression returned a result of type: " 
              + output.getClass().getName() + " for " + this);
        }
        dps[i].reset(timestamp, result);
      }
      return dps;
    }