/** * Apply the bi-linear operator on all points of this. Second operator input * is taken from values. Store the values in this. */ public void applyBilinearOperator(BilinearSampledValueOperator operator, ReadOnlyTimeSeries values) { // final FloatTimeSeries factors = new FloatTreeTimeSeries(values); final TimeSeriesMerger merger = new TimeSeriesMerger(this, values); // calculate the new values for this. final List<SampledValue> newValues = new ArrayList<>(merger.getTimestamps().size()); for (Long t : merger.getTimestamps()) { final SampledValue v1 = this.getValueSecure(t); final SampledValue v2 = getValueSecure(values, t); final SampledValue newValue = operator.apply(v1, v2); newValues.add(newValue); } // replace values in this with new values and set interpolation mode. deleteValues(); addValues(newValues); setInterpolationMode(merger.getInterpolationMode()); }
SampledValue lastValue = getValueSecure(searchInterval.getStart()); SampledValue lastDummy = getValueSecure(searchInterval.getEnd()); TimeInterval candidate = interpolation.getPositiveInterval(lastValue, lastDummy, getValueType()); if (!candidate.isEmpty()) {
@Override public synchronized float integrate(long t0, long t1) { // react to zero range or t1<t0. if (t1 == t0) { return 0.f; } if (t1 < t0) { return -integrate(t1, t0); } final InterpolationFunction function = getInterpolationFunction(); double result = 0; SampledValue left = getValueSecure(t0); for (SampledValue right : getSubset(t0, t1)) { result += function.integrate(left, right, getValueType()).getDoubleValue(); left = right; } SampledValue right = getValueSecure(t1); result += function.integrate(left, right, getValueType()).getDoubleValue(); return (float) result; }