Class BandSet

    • Field Detail

      • EMPTY_BYTE_ARRAY

        private static final byte[] EMPTY_BYTE_ARRAY
      • effortThresholds

        private static final int[] effortThresholds
      • effort

        final int effort
      • canonicalLargest

        private long[] canonicalLargest
      • canonicalSmallest

        private long[] canonicalSmallest
    • Constructor Detail

      • BandSet

        public BandSet​(int effort,
                       SegmentHeader header)
        Constructs a new BandSet.
        Parameters:
        effort - the packing effort to be used (must be 1-9)
        header - the segment header
    • Method Detail

      • cpEntryListToArray

        protected int[] cpEntryListToArray​(java.util.List<? extends ConstantPoolEntry> list)
        Converts a list of ConstantPoolEntrys to an int[] array of their indices
        Parameters:
        list - conversion source.
        Returns:
        conversion result.
      • cpEntryOrNullListToArray

        protected int[] cpEntryOrNullListToArray​(java.util.List<? extends ConstantPoolEntry> list)
        Converts a list of ConstantPoolEntrys or nulls to an int[] array of their indices +1 (or 0 for nulls)
        Parameters:
        list - conversion source.
        Returns:
        conversion result.
      • encodeBandInt

        public byte[] encodeBandInt​(java.lang.String name,
                                    int[] ints,
                                    BHSDCodec defaultCodec)
                             throws Pack200Exception
        Encode a band of integers. The default codec may be used, but other Codecs are considered if effort is greater than 1.
        Parameters:
        name - name of the band (used for debugging)
        ints - the band
        defaultCodec - the default Codec
        Returns:
        the encoded band
        Throws:
        Pack200Exception - TODO
      • encodeFlags

        protected byte[] encodeFlags​(java.lang.String name,
                                     long[] flags,
                                     BHSDCodec loCodec,
                                     BHSDCodec hiCodec,
                                     boolean haveHiFlags)
                              throws Pack200Exception
        Encode a band of longs (values are split into their high and low 32 bits and then encoded as two separate bands
        Parameters:
        name - name of the band (for debugging purposes)
        flags - the band
        loCodec - Codec for the low 32-bits band
        hiCodec - Codec for the high 32-bits band
        haveHiFlags - ignores the high band if true as all values would be zero
        Returns:
        the encoded band
        Throws:
        Pack200Exception - TODO
      • encodeScalar

        public byte[] encodeScalar​(int value,
                                   BHSDCodec codec)
                            throws Pack200Exception
        Encode a single value with the given Codec
        Parameters:
        value - the value to encode
        codec - Codec to use
        Returns:
        the encoded value
        Throws:
        Pack200Exception - TODO
      • encodeScalar

        public byte[] encodeScalar​(int[] band,
                                   BHSDCodec codec)
                            throws Pack200Exception
        Encode a band without considering other Codecs
        Parameters:
        band - the band
        codec - the Codec to use
        Returns:
        the encoded band
        Throws:
        Pack200Exception - TODO
      • flatten

        private long[] flatten​(long[][] flags)
      • integerListToArray

        protected int[] integerListToArray​(java.util.List<java.lang.Integer> integerList)
        Converts a list of Integers to an int[] array.
        Parameters:
        integerList - conversion source.
        Returns:
        conversion result.
      • longListToArray

        protected long[] longListToArray​(java.util.List<java.lang.Long> longList)
        Converts a list of Longs to an long[] array.
        Parameters:
        longList - conversion source.
        Returns:
        conversion result.
      • pack

        public abstract void pack​(java.io.OutputStream out)
                           throws java.io.IOException,
                                  Pack200Exception
        Write the packed set of bands to the given output stream
        Parameters:
        out - TODO
        Throws:
        java.io.IOException - If an I/O error occurs.
        Pack200Exception - TODO