package com.browseengine.bobo.util; import org.apache.lucene.util.OpenBitSet; /** * Breaks up a regular java array by splitting it into a 2 dimensional array with * a predefined block size. Attempts to induce more efficient GC. */ public abstract class BigSegmentedArray { protected final int _size; protected final int _blockSize; protected final int _shiftSize; protected int _numrows; public BigSegmentedArray(int size) { _size = size; _blockSize = getBlockSize(); _shiftSize = getShiftSize(); _numrows = (size >> _shiftSize) + 1; } public int size() { return _size; } abstract int getBlockSize(); // TODO: maybe this should be automatically calculated abstract int getShiftSize(); abstract public int get(int id); public int capacity() { return _numrows * _blockSize; } abstract public void add(int id, int val); abstract public void fill(int val); abstract public void ensureCapacity(int size); abstract public int maxValue(); abstract public int findValue(int val, int id, int maxId); abstract public int findValues(OpenBitSet bitset, int id, int maxId); abstract public int findValueRange(int minVal, int maxVal, int id, int maxId); abstract public int findBits(int bits, int id, int maxId); }