@Override Object createArray(int length, Bits bits, int requiredBits) { if (length == 0) { return EMPTY_DOUBLE_ARRAY; } final double[] result = new double[length]; for (int i = 0; i < length; i++) { result[i] = Double.longBitsToDouble(bits.getLong(requiredBits)); } return result; }
private void assertBitPackedArrayGetsCorrectlySerializedAndDeserialized( Object array, PropertyType type, int expectedBitsUsedPerItem, int expectedRecordCount) { Collection<DynamicRecord> records = storeArray(array); Pair<byte[], byte[]> asBytes = loadArray(records); assertArrayHeader(asBytes.first(), type, expectedBitsUsedPerItem); Bits bits = Bits.bitsFromBytes(asBytes.other()); int length = Array.getLength(array); for (int i = 0; i < length; i++) assertEquals( ((Number) Array.get(array, i)).longValue(), bits.getLong(expectedBitsUsedPerItem)); }
@Override Object createArray(int length, Bits bits, int requiredBits) { if (length == 0) { return EMPTY_LONG_ARRAY; } final long[] result = new long[length]; for (int i = 0; i < length; i++) { result[i] = bits.getLong(requiredBits); } return result; }
public static long versionStringToLong(String storeVersion) { if (CommonAbstractStore.UNKNOWN_VERSION.equals(storeVersion)) { return -1; } Bits bits = Bits.bits(8); int length = storeVersion.length(); if (length == 0 || length > 7) { throw new IllegalArgumentException( String.format( "The given string %s is not of proper size for a store version string", storeVersion)); } bits.put(length, 8); for (int i = 0; i < length; i++) { char c = storeVersion.charAt(i); if (c < 0 || c >= 256) throw new IllegalArgumentException( String.format( "Store version strings should be encode-able as Latin1 - %s is not", storeVersion)); bits.put(c, 8); // Just the lower byte } return bits.getLong(); }