public class BTree
extends java.lang.Object
Modifier and Type | Class and Description |
---|---|
static class |
BTree.Builder<V> |
static class |
BTree.Dir |
Constructor and Description |
---|
BTree() |
Modifier and Type | Method and Description |
---|---|
static <C,K extends C,V extends C> |
build(java.util.Collection<K> source,
UpdateFunction<K,V> updateF) |
static <C,K extends C,V extends C> |
build(java.lang.Iterable<K> source,
int size,
UpdateFunction<K,V> updateF)
Creates a BTree containing all of the objects in the provided collection
|
static <C,K extends C,V extends C> |
build(java.lang.Iterable<K> source,
UpdateFunction<K,V> updateF) |
static <V> BTree.Builder<V> |
builder(java.util.Comparator<? super V> comparator) |
static <V> BTree.Builder<V> |
builder(java.util.Comparator<? super V> comparator,
int initialCapacity) |
static <V> V |
ceil(java.lang.Object[] btree,
java.util.Comparator<? super V> comparator,
V find) |
static <V> int |
ceilIndex(java.lang.Object[] btree,
java.util.Comparator<? super V> comparator,
V find) |
static int |
depth(java.lang.Object[] tree) |
static java.lang.Object[] |
empty() |
static boolean |
equals(java.lang.Object[] a,
java.lang.Object[] b) |
static <V> V |
find(java.lang.Object[] node,
java.util.Comparator<? super V> comparator,
V find) |
static <V> V |
findByIndex(java.lang.Object[] tree,
int index) |
static <V> int |
findIndex(java.lang.Object[] node,
java.util.Comparator<? super V> comparator,
V find)
Honours result semantics of
Arrays.binarySearch(long[], long) , as though it were performed on the tree flattened into an array |
static <V> V |
floor(java.lang.Object[] btree,
java.util.Comparator<? super V> comparator,
V find) |
static <V> int |
floorIndex(java.lang.Object[] btree,
java.util.Comparator<? super V> comparator,
V find) |
static int |
hashCode(java.lang.Object[] btree) |
static <V> V |
higher(java.lang.Object[] btree,
java.util.Comparator<? super V> comparator,
V find) |
static <V> int |
higherIndex(java.lang.Object[] btree,
java.util.Comparator<? super V> comparator,
V find) |
static boolean |
isEmpty(java.lang.Object[] tree) |
static boolean |
isWellFormed(java.lang.Object[] btree,
java.util.Comparator<? extends java.lang.Object> cmp) |
static <V> java.lang.Iterable<V> |
iterable(java.lang.Object[] btree) |
static <V> java.lang.Iterable<V> |
iterable(java.lang.Object[] btree,
BTree.Dir dir) |
static <V> java.lang.Iterable<V> |
iterable(java.lang.Object[] btree,
int lb,
int ub,
BTree.Dir dir) |
static <V> java.util.Iterator<V> |
iterator(java.lang.Object[] btree) |
static <V> java.util.Iterator<V> |
iterator(java.lang.Object[] btree,
BTree.Dir dir) |
static <V> java.util.Iterator<V> |
iterator(java.lang.Object[] btree,
int lb,
int ub,
BTree.Dir dir) |
static <V> V |
lower(java.lang.Object[] btree,
java.util.Comparator<? super V> comparator,
V find) |
static <V> int |
lowerIndex(java.lang.Object[] btree,
java.util.Comparator<? super V> comparator,
V find) |
static <K> java.lang.Object[] |
merge(java.lang.Object[] tree1,
java.lang.Object[] tree2,
java.util.Comparator<? super K> comparator,
UpdateFunction<K,K> updateF) |
static <V> void |
replaceInSitu(java.lang.Object[] node,
java.util.Comparator<? super V> comparator,
V find,
V replace)
Modifies the provided btree directly.
|
static java.lang.Object[] |
singleton(java.lang.Object value) |
static int |
size(java.lang.Object[] tree) |
static long |
sizeOfStructureOnHeap(java.lang.Object[] tree) |
static <K,V> BTreeSearchIterator<K,V> |
slice(java.lang.Object[] btree,
java.util.Comparator<? super K> comparator,
BTree.Dir dir)
Returns an Iterator over the entire tree
|
static <K,V extends K> |
slice(java.lang.Object[] btree,
java.util.Comparator<? super K> comparator,
K start,
boolean startInclusive,
K end,
boolean endInclusive,
BTree.Dir dir) |
static <K,V extends K> |
slice(java.lang.Object[] btree,
java.util.Comparator<? super K> comparator,
K start,
K end,
BTree.Dir dir) |
static int |
toArray(java.lang.Object[] tree,
int treeStart,
int treeEnd,
java.lang.Object[] target,
int targetOffset) |
static int |
toArray(java.lang.Object[] tree,
java.lang.Object[] target,
int targetOffset)
Fill the target array with the contents of the provided subtree, in ascending order, starting at targetOffset
|
static <V> java.lang.Object[] |
transformAndFilter(java.lang.Object[] btree,
com.google.common.base.Function<? super V,? extends V> function)
Takes a btree and transforms it using the provided function, filtering out any null results.
|
static int |
treeIndexOfBranchKey(java.lang.Object[] root,
int keyIndex) |
static int |
treeIndexOffsetOfChild(java.lang.Object[] root,
int childIndex) |
static int |
treeIndexOfKey(java.lang.Object[] root,
int keyIndex)
tree index => index of key wrt all items in the tree laid out serially
This version of the method permits requesting out-of-bounds indexes, -1 and size
|
static int |
treeIndexOfLeafKey(int keyIndex) |
static <C,K extends C,V extends C> |
update(java.lang.Object[] btree,
java.util.Comparator<C> comparator,
java.util.Collection<K> updateWith,
UpdateFunction<K,V> updateF) |
static <C,K extends C,V extends C> |
update(java.lang.Object[] btree,
java.util.Comparator<C> comparator,
java.lang.Iterable<K> updateWith,
int updateWithLength,
UpdateFunction<K,V> updateF)
Returns a new BTree with the provided collection inserting/replacing as necessary any equal items
|
public static java.lang.Object[] empty()
public static java.lang.Object[] singleton(java.lang.Object value)
public static <C,K extends C,V extends C> java.lang.Object[] build(java.util.Collection<K> source, UpdateFunction<K,V> updateF)
public static <C,K extends C,V extends C> java.lang.Object[] build(java.lang.Iterable<K> source, UpdateFunction<K,V> updateF)
public static <C,K extends C,V extends C> java.lang.Object[] build(java.lang.Iterable<K> source, int size, UpdateFunction<K,V> updateF)
source
- the items to build the tree with. MUST BE IN STRICTLY ASCENDING ORDER.size
- the size of the source iterablepublic static <C,K extends C,V extends C> java.lang.Object[] update(java.lang.Object[] btree, java.util.Comparator<C> comparator, java.util.Collection<K> updateWith, UpdateFunction<K,V> updateF)
public static <C,K extends C,V extends C> java.lang.Object[] update(java.lang.Object[] btree, java.util.Comparator<C> comparator, java.lang.Iterable<K> updateWith, int updateWithLength, UpdateFunction<K,V> updateF)
V
- btree
- the tree to updatecomparator
- the comparator that defines the ordering over the items in the treeupdateWith
- the items to either insert / update. MUST BE IN STRICTLY ASCENDING ORDER.updateWithLength
- then number of elements in updateWithupdateF
- the update function to apply to any pairs we are swapping, and maybe abort earlypublic static <K> java.lang.Object[] merge(java.lang.Object[] tree1, java.lang.Object[] tree2, java.util.Comparator<? super K> comparator, UpdateFunction<K,K> updateF)
public static <V> java.util.Iterator<V> iterator(java.lang.Object[] btree)
public static <V> java.util.Iterator<V> iterator(java.lang.Object[] btree, BTree.Dir dir)
public static <V> java.util.Iterator<V> iterator(java.lang.Object[] btree, int lb, int ub, BTree.Dir dir)
public static <V> java.lang.Iterable<V> iterable(java.lang.Object[] btree)
public static <V> java.lang.Iterable<V> iterable(java.lang.Object[] btree, BTree.Dir dir)
public static <V> java.lang.Iterable<V> iterable(java.lang.Object[] btree, int lb, int ub, BTree.Dir dir)
public static <K,V> BTreeSearchIterator<K,V> slice(java.lang.Object[] btree, java.util.Comparator<? super K> comparator, BTree.Dir dir)
V
- btree
- the tree to iterate overdir
- direction of iterationpublic static <K,V extends K> BTreeSearchIterator<K,V> slice(java.lang.Object[] btree, java.util.Comparator<? super K> comparator, K start, K end, BTree.Dir dir)
btree
- the tree to iterate overcomparator
- the comparator that defines the ordering over the items in the treestart
- the beginning of the range to return, inclusive (in ascending order)end
- the end of the range to return, exclusive (in ascending order)dir
- if false, the iterator will start at the last item and move backwardspublic static <K,V extends K> BTreeSearchIterator<K,V> slice(java.lang.Object[] btree, java.util.Comparator<? super K> comparator, K start, boolean startInclusive, K end, boolean endInclusive, BTree.Dir dir)
btree
- the tree to iterate overcomparator
- the comparator that defines the ordering over the items in the treestart
- low bound of the rangestartInclusive
- inclusivity of lower boundend
- high bound of the rangeendInclusive
- inclusivity of higher bounddir
- direction of iterationpublic static <V> V find(java.lang.Object[] node, java.util.Comparator<? super V> comparator, V find)
public static <V> void replaceInSitu(java.lang.Object[] node, java.util.Comparator<? super V> comparator, V find, V replace)
public static <V> int findIndex(java.lang.Object[] node, java.util.Comparator<? super V> comparator, V find)
Arrays.binarySearch(long[], long)
, as though it were performed on the tree flattened into an arraypublic static <V> V findByIndex(java.lang.Object[] tree, int index)
public static <V> int lowerIndex(java.lang.Object[] btree, java.util.Comparator<? super V> comparator, V find)
public static <V> V lower(java.lang.Object[] btree, java.util.Comparator<? super V> comparator, V find)
public static <V> int floorIndex(java.lang.Object[] btree, java.util.Comparator<? super V> comparator, V find)
public static <V> V floor(java.lang.Object[] btree, java.util.Comparator<? super V> comparator, V find)
public static <V> int higherIndex(java.lang.Object[] btree, java.util.Comparator<? super V> comparator, V find)
public static <V> V higher(java.lang.Object[] btree, java.util.Comparator<? super V> comparator, V find)
public static <V> int ceilIndex(java.lang.Object[] btree, java.util.Comparator<? super V> comparator, V find)
public static <V> V ceil(java.lang.Object[] btree, java.util.Comparator<? super V> comparator, V find)
public static int size(java.lang.Object[] tree)
public static long sizeOfStructureOnHeap(java.lang.Object[] tree)
public static boolean isEmpty(java.lang.Object[] tree)
public static int depth(java.lang.Object[] tree)
public static int toArray(java.lang.Object[] tree, java.lang.Object[] target, int targetOffset)
tree
- sourcetarget
- arraytargetOffset
- offset in target arraypublic static int toArray(java.lang.Object[] tree, int treeStart, int treeEnd, java.lang.Object[] target, int targetOffset)
public static <V> java.lang.Object[] transformAndFilter(java.lang.Object[] btree, com.google.common.base.Function<? super V,? extends V> function)
public static boolean equals(java.lang.Object[] a, java.lang.Object[] b)
public static int hashCode(java.lang.Object[] btree)
public static int treeIndexOfKey(java.lang.Object[] root, int keyIndex)
root
- to calculate tree index withinkeyIndex
- root-local index of key to calculate tree-indexpublic static int treeIndexOfLeafKey(int keyIndex)
keyIndex
- node-local index of the key to calculate index ofpublic static int treeIndexOfBranchKey(java.lang.Object[] root, int keyIndex)
root
- to calculate tree-index withinkeyIndex
- root-local index of key to calculate tree-index ofpublic static int treeIndexOffsetOfChild(java.lang.Object[] root, int childIndex)
root
- to calculate tree-index withinchildIndex
- root-local index of *child* to calculate tree-index ofpublic static <V> BTree.Builder<V> builder(java.util.Comparator<? super V> comparator)
public static <V> BTree.Builder<V> builder(java.util.Comparator<? super V> comparator, int initialCapacity)
public static boolean isWellFormed(java.lang.Object[] btree, java.util.Comparator<? extends java.lang.Object> cmp)
Copyright © 2017 The Apache Software Foundation