protected Object toNativeArray() { Object values = getValuesArray(); int length = Array.getLength(values); if (size < length - 1) { Object res = Array.newInstance(values.getClass().getComponentType(), size); System.arraycopy(values, 0, res, 0, size); return res; } return values; }
protected Object toNativeArray() { Object values = getValuesArray(); int length = Array.getLength(values); if (size < length - 1) { Object res = Array.newInstance(values.getClass().getComponentType(), size); System.arraycopy(values, 0, res, 0, size); return res; } return values; }
@Override public T[] toValuesArray() { Object values = getValuesArray(); int length = Array.getLength(values); if (values.getClass().getComponentType().isPrimitive() || size < length) { T[] res = (T[]) Array.newInstance(getTypeClass(), size); for (int i = 0; i < size; i++) { res[i] = (T) Array.get(values, i); } return res; } else { return (T[]) values; } }
@Override public T[] toValuesArray() { Object values = getValuesArray(); int length = Array.getLength(values); if (values.getClass().getComponentType().isPrimitive() || size < length) { T[] res = (T[]) Array.newInstance(getTypeClass(), size); for (int i = 0; i < size; i++) { res[i] = (T) Array.get(values, i); } return res; } else { return (T[]) values; } }
@Override public boolean remove(Interval interval) { Object values = getValuesArray(); final int removeIndex = removeInner(interval.getLow(), interval.getHigh()); if (removeIndex >= 0) { if (removeIndex != size) { System.arraycopy(values, removeIndex + 1, values, removeIndex, size - removeIndex); } return true; } return false; }
@Override public boolean put(Interval interval, T value) { if (value == null) { throw new NullPointerException(); } Object values = getValuesArray(); int valuesLength = Array.getLength(values); final int index = putInner(interval.getLow(), interval.getHigh()); if (index < 0) { int insertIndex = -index - 1; if (size - 1 < valuesLength) { if (insertIndex < size - 1) { System.arraycopy(values, insertIndex, values, insertIndex + 1, size - insertIndex - 1); } Array.set(values, insertIndex, value); } else { Object newArray = Array.newInstance(values.getClass().getComponentType(), valuesLength + 1); System.arraycopy(values, 0, newArray, 0, insertIndex); System.arraycopy(values, insertIndex, newArray, insertIndex + 1, valuesLength - insertIndex); Array.set(newArray, insertIndex, value); setValuesArray(newArray); } return true; } else { Array.set(values, index, value); } return false; }
@Override public boolean put(Interval interval, T value) { if (value == null) { throw new NullPointerException(); } Object values = getValuesArray(); int valuesLength = Array.getLength(values); final int index = putInner(interval.getLow(), interval.getHigh()); if (index < 0) { int insertIndex = -index - 1; if (size - 1 < valuesLength) { if (insertIndex < size - 1) { System.arraycopy(values, insertIndex, values, insertIndex + 1, size - insertIndex - 1); } Array.set(values, insertIndex, value); } else { Object newArray = Array.newInstance(values.getClass().getComponentType(), valuesLength + 1); System.arraycopy(values, 0, newArray, 0, insertIndex); System.arraycopy(values, insertIndex, newArray, insertIndex + 1, valuesLength - insertIndex); Array.set(newArray, insertIndex, value); setValuesArray(newArray); } return true; } else { Array.set(values, index, value); } return false; }
@Override public boolean remove(Interval interval) { Object values = getValuesArray(); final int removeIndex = removeInner(interval.getLow(), interval.getHigh()); if (removeIndex >= 0) { if (removeIndex != size) { System.arraycopy(values, removeIndex + 1, values, removeIndex, size - removeIndex); } return true; } return false; }