Class BigDecimalCodec

java.lang.Object
io.deephaven.util.codec.BigDecimalCodec
All Implemented Interfaces:
ObjectCodec<BigDecimal>, ObjectDecoder<BigDecimal>

public class BigDecimalCodec extends Object implements ObjectCodec<BigDecimal>
BigDecimal encoder, with fixed and variable width support. We use 1's complement to store fixed precision values so that they may be ordered in binary without decoding. There is no practical limit on the precision we can store this way but we limit it to 1000 decimal digits for sanity. Variable width values are stored raw as BigDecimal scale followed by the unscaled byte array.
  • Field Details

  • Constructor Details

    • BigDecimalCodec

      public BigDecimalCodec(int precision, int scale, boolean strict)
    • BigDecimalCodec

      public BigDecimalCodec(@Nullable @Nullable String arguments)
  • Method Details

    • isNullable

      public boolean isNullable()
      Description copied from interface: ObjectCodec
      Does this codec support encoding of null values?
      Specified by:
      isNullable in interface ObjectCodec<BigDecimal>
      Returns:
      if null values are supported
    • getPrecision

      public int getPrecision()
      Description copied from interface: ObjectCodec
      If applicable, the maximum encodable precision. If precision is not applicable (i.e. for non-numeric types) this method should return zero.
      Specified by:
      getPrecision in interface ObjectCodec<BigDecimal>
      Returns:
      the numeric precision supported by this codec
    • getScale

      public int getScale()
      Description copied from interface: ObjectCodec
      If applicable, the maximum encodable scale. If scale is not applicable (i.e. for non-numeric types) this method should return zero.
      Specified by:
      getScale in interface ObjectCodec<BigDecimal>
      Returns:
      the numeric scale (digits after the decimal point) supported by this codec
    • encodedNullValue

      public byte[] encodedNullValue()
    • encode

      public byte @NotNull [] encode(@Nullable @Nullable BigDecimal input)
      Description copied from interface: ObjectCodec
      Encode the specified input as an array of bytes. Note that it is up to the implementation how to encode null inputs. The use of a zero-length byte array is strongly encouraged.
      Specified by:
      encode in interface ObjectCodec<BigDecimal>
      Parameters:
      input - The input object, possibly null
      Returns:
      The output byte array
    • decode

      @Nullable public @Nullable BigDecimal decode(byte @NotNull [] input, int offset, int length)
      Description copied from interface: ObjectDecoder
      Decode an object from an array of bytes.
      Specified by:
      decode in interface ObjectDecoder<BigDecimal>
      Parameters:
      input - The input byte array containing bytes to decode
      offset - The offset into the byte array to start decoding from
      length - The number of bytes to decode, starting at the offset
      Returns:
      The output object, possibly null
    • expectedObjectWidth

      public int expectedObjectWidth()
      Description copied from interface: ObjectDecoder
      What width byte array does this ObjectCodec expect to encode and decode?
      Specified by:
      expectedObjectWidth in interface ObjectDecoder<BigDecimal>
      Returns:
      VARIABLE_WIDTH_SENTINEL if the codec must encode and decode variable width columns, otherwise the fixed size of byte array that must be decoded and encoded.