protected List<SampledValue> getValuesInternal(SortedSet<SampledValue> elements) { final List<SampledValue> result; if (elements.isEmpty()) return new ArrayList<>(); SampledValue first = elements.first(); if (first.copyDefensively() == first) { // check if cloning of values is required result = new ArrayList<>(elements); // should be faster than below method } else { result = new ArrayList<>(elements.size()); for (SampledValue value : elements) result.add(value.copyDefensively()); } return result; }
@Override final public SampledValue getNextValue(long time) { final SampledValue pivot = new SampledValue(null, time, Quality.BAD); final SampledValue element = m_values.ceiling(pivot); return (element != null) ? element.copyDefensively() : null; }
@Override public SampledValue getPreviousValue(long time) { final SampledValue pivot = new SampledValue(null, time, Quality.BAD); final SampledValue element = m_values.floor(pivot); return (element != null) ? element.copyDefensively() : null; }
@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; }
@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; }