/** * decompress and return object array * @return decompress and return object array */ @SuppressWarnings("unchecked") public final T[] toObjectArray() { try { T[] compactArr = (T[]) Array.newInstance(getElementClass(), getSerializedSize() / getTupleSize()); for (int i = 0; i < compactArr.length; i++) { compactArr[i] = getElementClass().newInstance(); deserialize(i, compactArr[i]); } T[] objArr = (T[]) Array.newInstance(getElementClass(), getTotalObjectSize()); for (int i = 0; i < objArr.length; i++) { int compactIndex = getCompactIndex(i); objArr[i] = compactArr[compactIndex]; } return objArr; } catch (Exception e) { return null; } }
/** * serialize this compact array */ public final void serialize() { if (invalid) { int newSize = indexPool.size() * getTupleSize(); if (array == null || Array.getLength(array) < newSize) { array = ensureCapacity(array, newSize); for (Map.Entry<T, Integer> entry : indexPool.entrySet()) { int i = entry.getValue(); T obj = entry.getKey(); serialize(i, obj); } } invalid = false; } }
/** * @return compacted array's primitive size */ protected final int getSerializedSize() { return Array.getLength(getSerializedData()); }
/** * @return compressed object size */ public final int getCompactObjectSize() { assert getSerializedSize() % getTupleSize() == 0; return getSerializedSize() / getTupleSize(); }
/** * returns the object for the given index * @param index the index * @param store an object to store the result * @return */ public final T get(int index, T store) { serialize(); int j = getCompactIndex(index); return deserialize(j, store); }
/** * @param index * @param value */ public final void set(int index, T value) { int j = getCompactIndex(index); serialize(j, value); }
/** * return a float array of serialized data * @return */ public final float[] getSerializedData() { serialize(); return array; }
public T getEntryModSkip(int index, T store) { int total = data.getTotalObjectSize(); if (index == -1) { index--; } else if (index >= total) { index++; } index = mod(index, total); return data.get(index, store); } }
/** * returns the object for the given index * @param index the index * @param store an object to store the result * @return */ public final T get(int index, T store) { serialize(); int j = getCompactIndex(index); return deserialize(j, store); }
/** * @return uncompressed object size */ public final int getTotalObjectSize() { assert getSerializedSize() % getTupleSize() == 0; return index != null ? index.length : getSerializedSize() / getTupleSize(); }
/** * @param index * @param value */ public final void set(int index, T value) { int j = getCompactIndex(index); serialize(j, value); }
/** * release objects. * add() method call is not allowed anymore. */ public void freeze() { serialize(); indexPool.clear(); }
public T getEntryMod(int index, T store) { return data.get(mod(index, data.getTotalObjectSize()), store); }
/** * decompress and return object array * @return decompress and return object array */ public final T[] toObjectArray() { try { T[] compactArr = (T[]) Array.newInstance(getElementClass(), getSerializedSize() / getTupleSize()); for (int i = 0; i < compactArr.length; i++) { compactArr[i] = getElementClass().newInstance(); deserialize(i, compactArr[i]); } T[] objArr = (T[]) Array.newInstance(getElementClass(), getTotalObjectSize()); for (int i = 0; i < objArr.length; i++) { int compactIndex = getCompactIndex(i); objArr[i] = compactArr[compactIndex]; } return objArr; } catch (Exception e) { return null; } }
/** * returns the object for the given index * @param index the index * @param store an object to store the result * @return */ public final T get(int index, T store) { serialize(); int j = getCompactIndex(index); return deserialize(j, store); }
/** * serialize this compact array */ public final void serialize() { if (invalid) { int newSize = indexPool.size() * getTupleSize(); if (array == null || Array.getLength(array) < newSize) { array = ensureCapacity(array, newSize); for (Map.Entry<T, Integer> entry : indexPool.entrySet()) { int i = entry.getValue(); T obj = entry.getKey(); serialize(i, obj); } } invalid = false; } }
/** * @return compressed object size */ public final int getCompactObjectSize() { assert getSerializedSize() % getTupleSize() == 0; return getSerializedSize() / getTupleSize(); }
/** * @param index * @param value */ public final void set(int index, T value) { int j = getCompactIndex(index); serialize(j, value); }
/** * return a float array of serialized data * @return */ public final float[] getSerializedData() { serialize(); return array; }
public T getEntryClamp(int index, T store) { index = (int) FastMath.clamp(index, 0, data.getTotalObjectSize() - 1); return data.get(index, store); }