@Test public void testPrimitiveArray() { long[] values = new long[]{0, 0}; ArrayTable.BitSlicedPrimitiveArray.orLong(4, values, 0, 0x0F); assertEquals(0x0F, values[0]); ArrayTable.BitSlicedPrimitiveArray.orLong(4, values, 2, 0x0F); assertEquals(0xF0F, values[0]); values = new long[]{ 0x1213141516171819L, 0x232425262728292AL, 0x3435363738393A3BL}; assertEquals( 0x324, ArrayTable.BitSlicedPrimitiveArray.getLong(12, values, 9)); assertEquals( 0xa3b, ArrayTable.BitSlicedPrimitiveArray.getLong(12, values, 10)); Arrays.fill(values, 0); for (int i = 0; i < 10; i++) { ArrayTable.BitSlicedPrimitiveArray.orLong(10, values, i, i); } for (int i = 0; i < 10; i++) { assertEquals( i, ArrayTable.BitSlicedPrimitiveArray.getLong(10, values, i)); } }
@Test public void testPrimitiveArray() { long[] values = new long[]{0, 0}; ArrayTable.BitSlicedPrimitiveArray.orLong(4, values, 0, 0x0F); assertEquals(0x0F, values[0]); ArrayTable.BitSlicedPrimitiveArray.orLong(4, values, 2, 0x0F); assertEquals(0xF0F, values[0]); values = new long[]{ 0x1213141516171819L, 0x232425262728292AL, 0x3435363738393A3BL}; assertEquals( 0x324, ArrayTable.BitSlicedPrimitiveArray.getLong(12, values, 9)); assertEquals( 0xa3b, ArrayTable.BitSlicedPrimitiveArray.getLong(12, values, 10)); Arrays.fill(values, 0); for (int i = 0; i < 10; i++) { ArrayTable.BitSlicedPrimitiveArray.orLong(10, values, i, i); } for (int i = 0; i < 10; i++) { assertEquals( i, ArrayTable.BitSlicedPrimitiveArray.getLong(10, values, i)); } }
public Object permute(Object dataSet, int[] sources) { final long[] longs0 = (long[]) dataSet; int n = sources.length; final long[] longs = new long[longs0.length]; for (int i = 0; i < n; i++) { orLong( bitCount, longs, i, getLong(bitCount, longs0, sources[i])); } return longs; }
public static long getLong( int bitCount, int chunksPerWord, long mask, long[] values, int ordinal) { final int word = ordinal / chunksPerWord; final int chunk = ordinal % chunksPerWord; final long value = values[word]; final int shift = chunk * bitCount; return (value >> shift) & mask; }
public Object permute(Object dataSet, int[] sources) { final long[] longs0 = (long[]) dataSet; int n = sources.length; final long[] longs = new long[longs0.length]; for (int i = 0; i < n; i++) { orLong( bitCount, longs, i, getLong(bitCount, longs0, sources[i])); } return longs; }
public static long getLong( int bitCount, int chunksPerWord, long mask, long[] values, int ordinal) { final int word = ordinal / chunksPerWord; final int chunk = ordinal % chunksPerWord; final long value = values[word]; final int shift = chunk * bitCount; return (value >> shift) & mask; }