private static <V> Object[] merge(final Object[] left, final Object[] right, final V nodeKey) { assert BTree.getKeyEnd(left) == BTree.MINIMAL_NODE_SIZE; assert BTree.getKeyEnd(right) == BTree.MINIMAL_NODE_SIZE; final boolean leaves = BTree.isLeaf(left); final Object[] result; if (leaves) result = new Object[BTree.MINIMAL_NODE_SIZE * 2 + 1]; else result = new Object[left.length + right.length]; int offset = 0; offset = copyKeys(left, result, offset); result[offset++] = nodeKey; offset = copyKeys(right, result, offset); if (!leaves) { offset = copyChildren(left, result, offset); offset = copyChildren(right, result, offset); final int[] leftSizeMap = BTree.getSizeMap(left); final int[] rightSizeMap = BTree.getSizeMap(right); final int[] newSizeMap = new int[leftSizeMap.length + rightSizeMap.length]; offset = 0; offset = copySizeMap(leftSizeMap, newSizeMap, offset, 0); offset = copySizeMap(rightSizeMap, newSizeMap, offset, leftSizeMap[leftSizeMap.length - 1] + 1); result[result.length - 1] = newSizeMap; } return result; }
private static <V> Object[] merge(final Object[] left, final Object[] right, final V nodeKey) { assert BTree.getKeyEnd(left) == BTree.MINIMAL_NODE_SIZE; assert BTree.getKeyEnd(right) == BTree.MINIMAL_NODE_SIZE; final boolean leaves = BTree.isLeaf(left); final Object[] result; if (leaves) result = new Object[BTree.MINIMAL_NODE_SIZE * 2 + 1]; else result = new Object[left.length + right.length]; int offset = 0; offset = copyKeys(left, result, offset); result[offset++] = nodeKey; offset = copyKeys(right, result, offset); if (!leaves) { offset = copyChildren(left, result, offset); offset = copyChildren(right, result, offset); final int[] leftSizeMap = BTree.getSizeMap(left); final int[] rightSizeMap = BTree.getSizeMap(right); final int[] newSizeMap = new int[leftSizeMap.length + rightSizeMap.length]; offset = 0; offset = copySizeMap(leftSizeMap, newSizeMap, offset, 0); offset = copySizeMap(rightSizeMap, newSizeMap, offset, leftSizeMap[leftSizeMap.length - 1] + 1); result[result.length - 1] = newSizeMap; } return result; }
private static <V> Object[] merge(final Object[] left, final Object[] right, final V nodeKey) { assert BTree.getKeyEnd(left) == BTree.MINIMAL_NODE_SIZE; assert BTree.getKeyEnd(right) == BTree.MINIMAL_NODE_SIZE; final boolean leaves = BTree.isLeaf(left); final Object[] result; if (leaves) result = new Object[BTree.MINIMAL_NODE_SIZE * 2 + 1]; else result = new Object[left.length + right.length]; int offset = 0; offset = copyKeys(left, result, offset); result[offset++] = nodeKey; offset = copyKeys(right, result, offset); if (!leaves) { offset = copyChildren(left, result, offset); offset = copyChildren(right, result, offset); final int[] leftSizeMap = BTree.getSizeMap(left); final int[] rightSizeMap = BTree.getSizeMap(right); final int[] newSizeMap = new int[leftSizeMap.length + rightSizeMap.length]; offset = 0; offset = copySizeMap(leftSizeMap, newSizeMap, offset, 0); offset = copySizeMap(rightSizeMap, newSizeMap, offset, leftSizeMap[leftSizeMap.length - 1] + 1); result[result.length - 1] = newSizeMap; } return result; }
private static <V> Object[] merge(final Object[] left, final Object[] right, final V nodeKey) { assert BTree.getKeyEnd(left) == BTree.MINIMAL_NODE_SIZE; assert BTree.getKeyEnd(right) == BTree.MINIMAL_NODE_SIZE; final boolean leaves = BTree.isLeaf(left); final Object[] result; if (leaves) result = new Object[BTree.MINIMAL_NODE_SIZE * 2 + 1]; else result = new Object[left.length + right.length]; int offset = 0; offset = copyKeys(left, result, offset); result[offset++] = nodeKey; offset = copyKeys(right, result, offset); if (!leaves) { offset = copyChildren(left, result, offset); offset = copyChildren(right, result, offset); final int[] leftSizeMap = BTree.getSizeMap(left); final int[] rightSizeMap = BTree.getSizeMap(right); final int[] newSizeMap = new int[leftSizeMap.length + rightSizeMap.length]; offset = 0; offset = copySizeMap(leftSizeMap, newSizeMap, offset, 0); offset = copySizeMap(rightSizeMap, newSizeMap, offset, leftSizeMap[leftSizeMap.length - 1] + 1); result[result.length - 1] = newSizeMap; } return result; }