in java/src/main/java/com/epam/deltix/containers/AvlTree.java [200:248]
private void add(AvlTreeNode<TKey, TValue> node, TKey keyToAdd, TValue valueToAdd, AvlTreeNode<TKey, TValue> parent)
{
if (keyToAdd.compareTo(node.key) < 0)
{
if (node.left == null)
{
if(freeIndexesHead == -1) resize();
node.left = avlTreeNodeAPMemoryManager.getNew();
node.left.initNode(keyToAdd, valueToAdd, freeIndexes[freeIndexesHead]);
values.set(freeIndexes[freeIndexesHead], node.left.value);
keys.set(freeIndexes[freeIndexesHead], node.left.key);
freeIndexesHead--;
if(prev[node.index] != -1)
next[prev[node.index]] = node.left.index;
prev[node.left.index] = prev[node.index];
prev[node.index] = node.left.index;
next[node.left.index] = node.index;
}
else
add(node.left, keyToAdd, valueToAdd, node);
leftFix(node, parent);
}
else// if (keyToAdd.CompareTo(node.key) > 0)
{
if (node.right == null)
{
if(freeIndexesHead == -1) resize();
node.right = avlTreeNodeAPMemoryManager.getNew();
node.right.initNode(keyToAdd, valueToAdd, freeIndexes[freeIndexesHead]);
values.set(freeIndexes[freeIndexesHead], node.right.value);
keys.set(freeIndexes[freeIndexesHead], node.right.key);
freeIndexesHead--;
if(next[node.index] != -1) prev[next[node.index]] = node.right.index;
next[node.right.index] = next[node.index];
next[node.index] = node.right.index;
prev[node.right.index] = node.index;
}
else
add(node.right, keyToAdd, valueToAdd, node);
rightFix(node, parent);
}
}