@Override public List<SampledValue> downsample(long t0, long t1, long minimumInterval) { List<SampledValue> newValues = new ArrayList<SampledValue>(); if (t1 < t0) return newValues; List<SampledValue> values = getValues(t0, t1); // List<SampledValue> oldValues = new ArrayList<SampledValue>(); // if (values.isEmpty() || t0 < values.get(0).getTimestamp()) { // SampledValue sv = getValue(t0); // if (sv != null) // oldValues.add(sv); // } // oldValues.addAll(values); // SampledValue sv = getValue(t1); // if (t1 > t0 && sv != null) // oldValues.add(sv); // // split into sub intervals // long lastT = Long.MIN_VALUE; // Quality lastQuality = Quality.GOOD; // InterpolationMode mode = getInterpolationMode(); // List<SampledValue> currentList = new ArrayList<SampledValue>(); // for (int i = 0;i<oldValues.size(); i++) { // SampledValue sv0 = oldValues.get(i); // long ta = sv.getTimestamp(); // Quality qual = sv.getQuality(); // if (qual != lastQuality || (qual == Quality.GOOD && t0 - lastT >= minimumInterval)) { InterpolationMode mode = getInterpolationMode(); return downsample(t0, t1, minimumInterval, values, getValue(t0), getValue(t1),mode); }
@Override public float getAverage(long t0, long t1) { if (t1 == t0) { SampledValue sv = getValue(t0); if (sv == null || sv.getQuality() == Quality.BAD) return Float.NaN; else return sv.getValue().getFloatValue(); } if (getInterpolationMode() == InterpolationMode.NONE) { int count = 0; float val = 0; List<SampledValue> values; if (t0 < t1) values = getValues(t0, t1); else values = getValues(t1, t0); for (SampledValue sv: values) { if (sv.getQuality() != Quality.BAD) { count++; val += sv.getValue().getFloatValue(); } } if (count == 0) return Float.NaN; else return val / count; } return integrate(t0,t1) / (t1 - t0); }