/** * Copy-constructor from another time series. Note that the TimeSeries interface provides no means of telling the * user what the actual data type is, so it must be provided explicitly. */ public TreeTimeSeries(ReadOnlyTimeSeries other, Class<? extends Value> type) { this.m_type = type; addValues(other.getValues(Long.MIN_VALUE)); setInterpolationMode(other.getInterpolationMode()); }
@Override public TreeTimeSeries read(ReadOnlyTimeSeries schedule) { m_values.clear(); final List<SampledValue> newValues = schedule.getValues(Long.MIN_VALUE); for (SampledValue value : newValues) { m_values.add(value.copyDefensively()); } setInterpolationMode(schedule.getInterpolationMode()); return this; }
@Override public TreeTimeSeries read(ReadOnlyTimeSeries schedule, long start, long end) { m_values.clear(); final List<SampledValue> newValues = schedule.getValues(start, end); for (SampledValue value : newValues) { m_values.add(value.copyDefensively()); } setInterpolationMode(schedule.getInterpolationMode()); return this; }
@Override public TreeTimeSeries readWithBoundaries(ReadOnlyTimeSeries schedule, long start, long end) { m_values.clear(); setInterpolationMode(schedule.getInterpolationMode()); if (end < start) return this; if (end == start) { SampledValue sv = schedule.getValue(start); if (sv != null) m_values.add(new SampledValue(sv)); return this; } final List<SampledValue> newValues = schedule.getValues(start, end); if (newValues.isEmpty() || start < newValues.get(0).getTimestamp()) { SampledValue sv = schedule.getValue(start); if (sv != null) m_values.add(sv.copyDefensively()); } for (SampledValue value : newValues) { m_values.add(value.copyDefensively()); } SampledValue sv = schedule.getValue(end); if (sv != null) m_values.add(sv.copyDefensively()); return this; }
/** * Multiplies each value of <code>schedule</code> with <code>factor</code> and adds <code>addend</code> * * @param readOnlyTimeSeries * @param factor * @param addend * @return */ public static MemoryTimeSeries affineTransformation(ReadOnlyTimeSeries readOnlyTimeSeries, float factor, float addend) { TreeTimeSeries tts = new TreeTimeSeries(FloatValue.class); tts.setInterpolationMode(readOnlyTimeSeries.getInterpolationMode()); final Iterator<SampledValue> it = readOnlyTimeSeries.iterator(); SampledValue value; while (it.hasNext()) { value = it.next(); tts.addValue(new SampledValue(new FloatValue(value.getValue().getFloatValue()*factor + addend), value.getTimestamp(), value.getQuality())); } return tts; }