@Override public MemoryTimeSeries clone() { return new ArrayTimeSeries(this, m_type); }
@Override public boolean replaceValuesFixedStep(long startTime, List<Value> values, long stepSize) { final long endTime = startTime + stepSize * values.size(); deleteValues(startTime, endTime); long t = startTime; for (Value value : values) { addValue(t, value); t += stepSize; } return true; }
@Override public boolean replaceValues(long startTime, long endTime, Collection<SampledValue> values) { deleteValues(startTime, endTime); addValues(values); return true; }
@Override protected ReadOnlyTimeSeries readResource(Schedule resource) { return new ArrayTimeSeries(ValueResourceUtils.getValueType(resource)).read(resource,interval[0],interval[1]); }
/** * 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 ArrayTimeSeries(ReadOnlyTimeSeries other, Class<? extends Value> type) { this.m_type = type; final List<SampledValue> values = other.getValues(Long.MIN_VALUE); addValues(values); setInterpolationMode(other.getInterpolationMode()); }
@Override public boolean addValue(long timestamp, Value value, long timeOfCalculation) { addValue(timestamp, value); m_lastCalculationTime = timeOfCalculation; return true; }
@Override public boolean replaceValuesFixedStep(long startTime, List<Value> values, long stepSize, long timeOfCalculation) { replaceValuesFixedStep(startTime, values, stepSize); m_lastCalculationTime = timeOfCalculation; return true; }
@Override public ArrayTimeSeries read(ReadOnlyTimeSeries schedule, long start, long end) { m_values.clear(); final List<SampledValue> newValues = schedule.getValues(start, end); m_values.addValuesCopies(newValues); setInterpolationMode(schedule.getInterpolationMode()); return this; }
@Override public void write(TimeSeries schedule) { final List<SampledValue> values = m_values.getValues(); schedule.replaceValues(0, Long.MAX_VALUE, values); schedule.setInterpolationMode(getInterpolationMode()); }
@Override public boolean addValues(Collection<SampledValue> values, long timeOfCalculation) { addValues(values); m_lastCalculationTime = timeOfCalculation; return true; }
@Override final public boolean deleteValues(long endTime) { deleteValues(0, endTime); return true; }
@Override public SampledValue getValueSecure(long t) { final SampledValue result = getValue(t); return (result != null) ? result : new SampledValue(new FloatValue(0.f), t, Quality.BAD); }
@Override final public SampledValue getValue(long time) { if (!isInsideTimeSeriesRange(time)) { return null; } final int idx = m_values.getIndexBelow(time); final SampledValue left = (idx != SampledValueSortedList.NO_SUCH_INDEX) ? m_values.get(idx) : null; final SampledValue right = (idx < m_values.size() - 1) ? m_values.get(idx + 1) : null; return m_interpolationFunction.interpolate(left, right, time, m_type); }
@Override public final boolean addValues(Collection<SampledValue> values) { // TODO make more performant by sorting only once, not after every new value insterted. for (SampledValue value : values) { addValue(value); } return true; }
@Override @Deprecated public final boolean addValueSchedule(long startTime, long stepSize, List<Value> values) { return replaceValuesFixedStep(startTime, values, stepSize); }
@Override public ArrayTimeSeries readWithBoundaries(ReadOnlyTimeSeries schedule, long start, long end) { m_values.clear(); setInterpolationMode(schedule.getInterpolationMode()); final List<SampledValue> newValues = schedule.getValues(start, end); List<SampledValue> resultList = new ArrayList<SampledValue>(); if (end < start) return this; if (newValues.isEmpty() || start < newValues.get(0).getTimestamp()) { SampledValue sv = schedule.getValue(start); if (sv != null) resultList.add(new SampledValue(sv)); } resultList.addAll(newValues); if (end > start) { SampledValue sv = schedule.getValue(end); if (sv != null) resultList.add(new SampledValue(sv)); } m_values.addValuesCopies(resultList); return this; }
@Override public void write(TimeSeries schedule, long from, long to) { final List<SampledValue> values = m_values.getValues(); schedule.replaceValues(from, to, values); schedule.setInterpolationMode(getInterpolationMode()); }
@Override public void setSchedule(Schedule schedule, ReadOnlyTimeSeries function) throws NoSuchResourceException { final String path = schedule.getPath(); if (!m_scheduleMap.containsKey(path)) { throw new NoSuchResourceException("Can not set a value for schedule " + schedule.toString() + " in transaction: Resource had not been registered before. Be sure to register the resource to the transaction with addResource(...) before trying to set a value for it"); } final RwPair<MemoryTimeSeries> pair = m_scheduleMap.get(path); final Class<? extends Value> valueType = getValueType(schedule); final MemoryTimeSeries state = new ArrayTimeSeries(function, valueType); pair.write = state; }
@Override public boolean addValue(long timestamp, Value value) { addValue(new SampledValue(value, timestamp, Quality.GOOD)); return true; }
@Override @Deprecated public final boolean addValueSchedule(long startTime, long stepSize, List<Value> values, long timeOfCalculation) { return replaceValuesFixedStep(startTime, values, stepSize, timeOfCalculation); }