package com.almalence.plugins.export.ExifDriver.Values; import com.almalence.plugins.export.ExifDriver.ExifDriver; /** * Basic class for scalar number data types. Implements Methods for Reading and * writing signed and unsigned values, same as constructor from value. */ public class ValueNumber extends ExifValue { int[] values; public ValueNumber(int _dataType, int _initValue) { super(_dataType); values=new int[]{_initValue}; } public ValueNumber(int _dataType) { super(_dataType); } @Override public int[] getIntegers() { return values; } @Override public void setIntegers(int[] _values){ values=_values; } /** * Read values from source data. It uses own information about component's * size to determine, how much bytes read for each component. * * @param _data * Source byte array * @param _offset * Where to start the reading * @param _count * How much components to read * @param _align * - Endian * @return Array of read components */ public void readValueFromData(byte[] _data, int _offset, int _count, int _align) { values = new int[_count]; int componentSize = getComponentSize(); for (int i = 0; i < _count; i++) { int iOffs = _offset + componentSize * i; switch (dataType) { case ExifDriver.FORMAT_SIGNED_BYTE: case ExifDriver.FORMAT_SIGNED_SHORT: case ExifDriver.FORMAT_SIGNED_LONG: values[i] = ExifDriver.readSInt(_data, iOffs, componentSize, _align); break; case ExifDriver.FORMAT_UNSIGNED_BYTE: case ExifDriver.FORMAT_UNSIGNED_SHORT: case ExifDriver.FORMAT_UNSIGNED_LONG: values[i] = ExifDriver.readUInt(_data, iOffs, componentSize, _align); break; default: break; } } } @Override protected void writeValues(byte[] _data, int _offset) { for (int i = 0; i < values.length; i++) { ExifDriver.writeNumber(_data, _offset + getComponentSize() * i, values[i], getComponentSize()); } } @Override public int getNbfComponents() { if (values != null) { return values.length; } return 0; } }