private void add()

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);
        }
    }