public Bits put( byte value ) { return put( value, Byte.SIZE ); }
public Bits put( byte value, int steps ) { return put( (long) value, steps ); }
public Bits put( short value ) { return put( value, Short.SIZE ); }
public Bits put( byte[] bytes, int offset, int length ) { for ( int i = offset; i < offset + length; i++ ) { put( bytes[i], Byte.SIZE ); } return this; }
public Bits put( int value ) { return put( value, Integer.SIZE ); }
public Bits put( short value, int steps ) { return put( (long) value, steps ); }
public Bits put( int value, int steps ) { return put( (long) value, steps ); }
public Bits put( long value ) { return put( value, Long.SIZE ); }
public static boolean writeLatin1Characters( String string, Bits bits ) { int length = string.length(); for ( int i = 0; i < length; i++ ) { char c = string.charAt( i ); if ( c >= 256 ) { return false; } bits.put( c, 8 ); // Just the lower byte } return true; }
public static Bits bitsFromBytes( byte[] bytes, int offset, int length ) { Bits bits = bits( length - offset ); for ( int i = offset; i < (offset + length); i++ ) { bits.put( bytes[i] ); } return bits; }
private void translateData( Bits bits, byte[] data, int length, final int step ) { for ( int i = 0; i < length; i++ ) { bits.put(encTranslate(data[i]), step); } }
public static Bits bitsFromBytes( byte[] bytes, int startIndex ) { final int count = bytes.length; Bits bits = bits( count - startIndex ); for ( int i = startIndex; i < count; i++ ) { bits.put( bytes[i] ); } return bits; }
private static boolean inlineValues( long[] values, int maxBitsPerLabel, Bits target ) { long limit = 1L << maxBitsPerLabel; for ( long value : values ) { if ( highestOneBit( value ) < limit ) { target.put( value, maxBitsPerLabel ); } else { return false; } } return true; }
private Value readShortArray() { Bits bits = Bits.bits( MAX_BYTES_IN_SHORT_STRING_OR_SHORT_ARRAY ); int blocksUsed = ShortArray.calculateNumberOfBlocksUsed( currentBlock() ); for ( int i = 0; i < blocksUsed; i++ ) { bits.put( getBlocks()[block + i] ); } return ShortArray.decode( bits ); }
private long inlinedLabelsLongRepresentation( long... labelIds ) { long header = (long) labelIds.length << 36; byte bitsPerLabel = (byte) (36 / labelIds.length); Bits bits = bits( 5 ); for ( long labelId : labelIds ) { bits.put( labelId, bitsPerLabel ); } return header | bits.getLongs()[0]; }
private long inlinedLabelsLongRepresentation( long... labelIds ) { long header = (long) labelIds.length << 36; byte bitsPerLabel = (byte) (36 / labelIds.length); Bits bits = bits( 5 ); for ( long labelId : labelIds ) { bits.put( labelId, bitsPerLabel ); } return header | bits.getLongs()[0]; }
@Test public void asBytes() { int numberOfBytes = 14; Bits bits = bits( numberOfBytes ); for ( byte i = 0; i < numberOfBytes; i++ ) { bits.put( i ); } byte[] bytes = bits.asBytes(); for ( byte i = 0; i < numberOfBytes; i++ ) { assertEquals( i, bytes[i] ); } }
@Test public void doubleAsBytes() { double[] array1 = new double[] { 1.0, 2.0, 3.0, 4.0, 5.0 }; Bits bits = Bits.bits( array1.length * 8 ); for ( double value : array1 ) { bits.put( Double.doubleToRawLongBits( value ) ); } String first = bits.toString(); byte[] asBytes = bits.asBytes(); String other = Bits.bitsFromBytes( asBytes ).toString(); assertEquals( first, other ); }