package nodomain.freeyourgadget.gadgetbridge.service.devices.garmin.fit.baseTypes; import java.nio.ByteBuffer; public class BaseTypeShort implements BaseTypeInterface { private final int min; private final int max; private final int invalid; private final boolean unsigned; private final int size = 2; BaseTypeShort(boolean unsigned, int invalid) { if (unsigned) { this.min = 0; this.max = 0xffff; } else { this.min = Short.MIN_VALUE; this.max = Short.MAX_VALUE; } this.invalid = invalid; this.unsigned = unsigned; } public int getByteSize() { return size; } @Override public Object decode(final ByteBuffer byteBuffer, double scale, int offset) { int s = unsigned ? Short.toUnsignedInt(byteBuffer.getShort()) : byteBuffer.getShort(); if (s < min || s > max) return null; if (s == invalid) return null; return (s / scale) - offset; } @Override public void encode(ByteBuffer byteBuffer, Object o, double scale, int offset) { if (null == o) { invalidate(byteBuffer); return; } int i = (int) ((((Number) o).intValue() + offset) * scale); if (i < min || i > max) { invalidate(byteBuffer); return; } byteBuffer.putShort((short) i); } @Override public void invalidate(ByteBuffer byteBuffer) { byteBuffer.putShort((short) invalid); } }