5 public class AVLTree<class AT> : CustomAVLTree<BT = AVLNode<AT>, KT = AT, T = AT, D = AT>
9 AT GetData(AVLNode<AT> node)
11 return node ? ((class(AT).type == structClass) ? (AT)(((byte *)&(uint64)node.key) + __ENDIAN_PAD(sizeof(void *))) : node.key) : (AT)0;
14 bool SetData(AVLNode<AT> node, AT value)
19 if(class(AT).type == structClass)
20 memcpy((void *)(((byte *)&(uint64)node.key) + __ENDIAN_PAD(sizeof(void *))), (void *)value, class(AT).structSize);
23 AVLTree::Add((AT)node);
29 AVLNode<AT> Add(AT value)
32 if(class(AT).type == structClass)
34 node = (AVLNode<AT>)new0 byte[sizeof(class AVLNode) + class(AT).structSize - sizeof(node.key)];
35 memcpy((void *)(((byte *)&(uint64)node.key) + __ENDIAN_PAD(sizeof(void *))), (void *)value, class(AT).structSize);
38 node = (AVLNode<AT>)AVLNode { key = value };
39 if(!CustomAVLTree::Add((AT)node))
44 void Remove(AVLNode<AT> node)
46 CustomAVLTree::Remove(node);
50 AVLNode<AT> Find(const AT key)
52 AVLNode<AT> root = this.root;
53 return root ? root.Find(class(AT), key) : null;
56 // *** FIND ALL COMPARES KEY FOR EQUALITY, NOT USING OnCompare ***
57 AVLNode<AT> FindAll(const AT key)
59 AVLNode<AT> root = this.root;
60 return root ? root.FindAll(key) : null;