public LongArray slice(final long start, final long length) { return new LongArray(buffer, start*TYPE_SIZE, length); } }
@Override public long size64() { return longArray.length() * Long.SIZE / width; } }
@Override public void lookup(int[] docIds, long[] values, int n) { for (int i = 0; i < n; ++i) { values[i] = longArray.get(docIds[i]); } }
private long getLong(final long from, final long to) { ensureFromTo(longArray.length() * Long.SIZE, from, to); final long l = Long.SIZE - (to - from); final int startWord = word(from); final int startBit = bit(from); if (l == Long.SIZE) { return 0; } if (startBit <= l) { return (longArray.get(startWord) << (l - startBit)) >>> l; } return (longArray.get(startWord) >>> startBit) | ((longArray.get(startWord + 1) << ((Long.SIZE + l) - startBit)) >>> l); }
public void get(final long index, final LongArray longs, final long start, final long length) { longs.set(start, this, index, length); }
public void get(final long index, final LongArray longs) { get(index, longs, 0, longs.length); }
public void set(final long index, final long[] longs) { set(index, longs, 0, longs.length); }
public final boolean get(final int i) { return (bits.get(i >> 6) & (1L << (i & 0x3F))) != 0; }
private static void fill(final LongArray a, final int b, final int e, final long l) { for (int i = b; i < e; ++i) a.set(i, l); }
@Override public final LongArray longArray(long start, long numLongs) { return new LongArray(this, start, numLongs); }
public void get(final long index, final long[] longs) { get(index, longs, 0, longs.length); }
public void set(final long index, final LongArray longs) { set(index, longs, 0, longs.length); }
public static MMapBuffer cacheLongFieldToFile(UnsortedIntTermDocIterator iterator, int numDocs, File file) throws IOException { final int[] docIdBuf = new int[BUFFER_SIZE]; final int length = numDocs * 8; final MMapBuffer buffer = new MMapBuffer(file, 0L, length, FileChannel.MapMode.READ_WRITE, ByteOrder.LITTLE_ENDIAN); final LongArray longArray = buffer.memory().longArray(0, numDocs); try { while (iterator.nextTerm()) { final long term = iterator.term(); while (true) { final int n = iterator.nextDocs(docIdBuf); for (int i = 0; i < n; ++i) { longArray.set(docIdBuf[i], term); } if (n < docIdBuf.length) { break; } } } buffer.sync(0, length); } catch (RuntimeException e) { Closeables2.closeQuietly(buffer, LOG); throw e; } catch (IOException e) { Closeables2.closeQuietly(buffer, LOG); throw e; } return buffer; }