in orderbook-core/src/main/java/com/epam/deltix/orderbook/core/impl/collections/rbt/RBTree.java [817:872]
private Entry<K, V> buildFromSorted(final int level,
final int lo,
final int hi,
final int redLevel,
final ArrayList<V> values) {
/*
* Strategy: The root is the middlemost element. To get to it, we
* have to first recursively construct the entire left subtree,
* so as to grab all of its elements. We can then proceed with right
* subtree.
*
* The lo and hi arguments are the minimum and maximum
* indices to pull out of the iterator or stream for current subtree.
* They are not actually indexed, we just proceed sequentially,
* ensuring that items are extracted in corresponding order.
*/
if (hi < lo) {
return null;
}
final int mid = (lo + hi) >>> 1;
Entry<K, V> left = null;
if (lo < mid) {
left = buildFromSorted(level + 1, lo, mid - 1, redLevel,
values);
}
final K key = (K) values.get(currentIndex);
final V value = values.get(currentIndex);
final Entry<K, V> middle = pool.borrow();
middle.set(key, value, null);
// color nodes in non-full bottommost level red
if (level == redLevel) {
middle.color = RED;
}
if (left != null) {
middle.left = left;
left.parent = middle;
}
currentIndex++;
if (mid < hi) {
final Entry<K, V> right = buildFromSorted(level + 1, mid + 1, hi, redLevel, values);
middle.right = right;
right.parent = middle;
}
return middle;
}