private BitMappedTrie<T> append(java.util.Iterator<? extends T> iterator, int size) { BitMappedTrie<T> result = this; while (size > 0) { Object array = result.array; int shift = result.depthShift; if (result.isFullRight()) { array = obj().asArray(array); shift += BRANCHING_BASE; } final int index = offset + result.length; final int leafSpace = lastDigit(index); final int delta = Math.min(size, BRANCHING_FACTOR - leafSpace); size -= delta; array = result.modify(array, shift, index, COPY_NODE, appendToLeaf(iterator, leafSpace + delta)); result = new BitMappedTrie<>(type, array, offset, result.length + delta, shift); } return result; } private boolean isFullRight() { return (offset + length + 1) > treeSize(BRANCHING_FACTOR, depthShift); }
private BitMappedTrie<T> append(java.util.Iterator<? extends T> iterator, int size) { BitMappedTrie<T> result = this; while (size > 0) { Object array = result.array; int shift = result.depthShift; if (result.isFullRight()) { array = obj().asArray(array); shift += BRANCHING_BASE; } final int index = offset + result.length; final int leafSpace = lastDigit(index); final int delta = Math.min(size, BRANCHING_FACTOR - leafSpace); size -= delta; array = result.modify(array, shift, index, COPY_NODE, appendToLeaf(iterator, leafSpace + delta)); result = new BitMappedTrie<>(type, array, offset, result.length + delta, shift); } return result; } private boolean isFullRight() { return (offset + length + 1) > treeSize(BRANCHING_FACTOR, depthShift); }