@Override Value createScheduleValue(Long value) { return new LongValue(value); } };
@Override public Value createOgemaValue() { return new LongValue(value); }
@Override SampledValue createValue(long time) { return new SampledValue(new LongValue(el.getData().getLong()), time, Quality.GOOD); }
@Override public void step(SampledValueDataPoint data) { for (Map.Entry<Integer, SampledValue> inputValue : data.getElements().entrySet()) { SingleInputGapData inputState = inputStates.get(inputValue.getKey()); SampledValue v = inputValue.getValue(); if (inputState.currentRunStart == -1) { inputState.currentRunStart = v.getTimestamp(); } if (inputState.last != null) { long interval = v.getTimestamp() - inputState.last.getTimestamp(); if (interval > gapThreshold) { inputState.gaps.add(new SampledValue(new LongValue(interval), inputState.last.getTimestamp(), Quality.GOOD)); inputState.gapCount++; inputState.totalGapSize += interval; long runLength = inputState.last.getTimestamp() - inputState.currentRunStart; if (runLength > 0) { SampledValue run = new SampledValue(new LongValue(runLength), inputState.currentRunStart, Quality.GOOD); inputState.runs.add(run); } inputState.currentRunStart = -1; } } inputState.last = v; } }
/** * Create a {@link Value} from a {@link Number}. * @param value * either a {@link Float}, {@link Double}, {@link Integer}, {@link Long}, {@link Short} or {@link Byte}. * @throws IllegalArgumentException * if <tt>value</tt> is not of admissible type * @return */ public static Value createValue(final Number value) throws IllegalArgumentException { if (value instanceof Float) { final float f = value.floatValue(); return f == 0F ? FloatValue.ZERO : Float.isNaN(f) ? FloatValue.NAN : new FloatValue(f); } if (value instanceof Integer || value instanceof Short) return new IntegerValue(value.intValue()); if (value instanceof Long) return new LongValue(value.longValue()); if (value instanceof Double) return new DoubleValue(value.doubleValue()); if (value instanceof Byte) return new ByteArrayValue(new byte[]{value.byteValue()}); throw new IllegalArgumentException("Value type " + value.getClass() + " not supported"); }
private static Value transformBack(SingleValueResource in, float factor, float offset) { final Object value = ValueResourceUtils.getValue((ValueResource) in); if (in instanceof FloatResource) return new FloatValue(((float) value - offset) / factor); else if (in instanceof IntegerResource) return new IntegerValue(((int) value - (int) offset) / ((int) factor)); else if (in instanceof TimeResource) return new LongValue(((long) value - (long) offset) / ((long) factor)); else if (in instanceof BooleanResource) return new BooleanValue((boolean) value && (factor >= 0)); else throw new IllegalArgumentException("Unsupported resource type " + in.getResourceType().getName()); }
private List<SampledValue> getLongValues() { assert baseElement.isVirtual() || !((VirtualTreeElement) m_values).isVirtual() : "Schedule state inconsistent"; final long[] times = m_times.getData().getLongArr(); final long[] values = m_values.getData().getLongArr(); final int[] qualities = m_qualities.getData().getIntArr(); List<SampledValue> result = new ArrayList<>(values.length); for (int i = 0; i < values.length; ++i) { final long v = values[i]; final long t = times[i]; final Quality q = Quality.getQuality(qualities[i]); result.add(new SampledValue(new LongValue(v), t, q)); } return result; }
final void resourceChanged(final long t, final SingleValueResource resource) { final Value v; if (resource instanceof FloatResource) v = new FloatValue(((FloatResource) resource).getValue()); else if (resource instanceof IntegerResource) v = new IntegerValue(((IntegerResource) resource).getValue()); else if (resource instanceof BooleanResource) v = new BooleanValue(((BooleanResource) resource).getValue()); else if (resource instanceof TimeResource) v = new LongValue(((TimeResource) resource).getValue()); else throw new IllegalArgumentException(); values.add(new SampledValue(v, t, Quality.GOOD)); }
Value getValue(N value) { if (value == null) value = getNullReplacement(); if (type == Float.class) return new FloatValue((Float) value); if (type == Integer.class) return new IntegerValue((Integer) value); if (type == Long.class) return new LongValue((Long) value); if (type == String.class) { return new StringValue((String) value); } return new FloatValue((Float) value); }
@Override public Value integrate(SampledValue x0, SampledValue x1, Class<? extends Value> valueType) { final long dt = x1.getTimestamp() - x0.getTimestamp(); final boolean emptyDomain = (dt == 0 || x0.getQuality() == Quality.BAD || x1.getQuality() == Quality.BAD); final Value value = x0.getValue(); if (value instanceof FloatValue || value instanceof DoubleValue || value instanceof BooleanValue) { if (emptyDomain) { return new FloatValue(0.f); } return new FloatValue(value.getFloatValue() * dt); } if (value instanceof LongValue) { if (emptyDomain) { return new LongValue(0L); } return new LongValue(value.getLongValue() * dt); } if (value instanceof IntegerValue) { if (emptyDomain) { return new IntegerValue(0); } return new IntegerValue((int) (value.getIntegerValue() * dt)); } throw new IllegalArgumentException("Cannot integrate a function with non-numerical value type " + value.getClass().getCanonicalName()); }
public static Value getValue(SingleValueResource resource) { if (resource instanceof FloatResource) { return new FloatValue(((FloatResource) resource).getValue()); } else if (resource instanceof IntegerResource) { return new IntegerValue(((IntegerResource) resource).getValue()); } else if (resource instanceof BooleanResource) { return new BooleanValue(((BooleanResource) resource).getValue()); } else if (resource instanceof TimeResource) { return new LongValue(((TimeResource) resource).getValue()); } else throw new RuntimeException(); }
private static Value transform(Value in, float factor, float offset) { if (in instanceof FloatValue) return new FloatValue(in.getFloatValue() * factor + offset); else if (in instanceof IntegerValue) return new IntegerValue(in.getIntegerValue() * ((int) factor) + (int) offset); // problematic... else if (in instanceof LongValue) return new LongValue(in.getLongValue() * ((long) factor) + (long) offset);// problematic... else if (in instanceof BooleanValue) return new BooleanValue(in.getBooleanValue() && (factor >= 0)); else return in; }
@Override public Value integrate(SampledValue x0, SampledValue x1, Class<? extends Value> valueType) { final long dt = x1.getTimestamp() - x0.getTimestamp(); final boolean emptyDomain = (dt == 0 || x0.getQuality() == Quality.BAD || x1.getQuality() == Quality.BAD); final Value v0 = x0.getValue(); final Value v1 = x1.getValue(); if (v0 instanceof FloatValue || v0 instanceof DoubleValue || v0 instanceof BooleanValue) { if (emptyDomain) return new FloatValue(0.f); return new FloatValue(0.5f * (v0.getFloatValue() + v1.getFloatValue()) * dt); } if (v0 instanceof LongValue) { if (emptyDomain) return new LongValue(0L); return new LongValue((v0.getLongValue() + v1.getLongValue()) * dt / 2); } if (v0 instanceof IntegerValue) { if (emptyDomain) return new IntegerValue(0); return new IntegerValue((int) ((v0.getIntegerValue() + v1.getIntegerValue()) * dt / 2)); } throw new IllegalArgumentException("Cannot integrate a function with non-numerical value type " + v0.getClass().getCanonicalName()); }
private SampledValue interpolateLong(SampledValue x0, SampledValue x1, long t) { final long t0 = x0.getTimestamp(); if (t == t0) { return new SampledValue(x0.getValue(), x0.getTimestamp(), x0.getQuality()); } final long t1 = x1.getTimestamp(); if (t == t1) { return new SampledValue(x1.getValue(), x1.getTimestamp(), x1.getQuality()); } final long y0 = x0.getValue().getLongValue(); final long y1 = x1.getValue().getLongValue(); final float inv_dt = 1.f / (float) (t1 - t0); final float relDist = ((float) (t - t0)) * inv_dt; final long y = y0 + (long) (relDist * (y1 - y0)); final Quality q0 = x0.getQuality(); final Quality q1 = x1.getQuality(); final Quality quality = (q0 == Quality.GOOD && q1 == Quality.GOOD) ? Quality.GOOD : Quality.BAD; return new SampledValue(new LongValue(y), t, quality); }