00001 00064 #include <SDL_types.h> 00065 #include <stddef.h> 00066 00071 typedef Uint16 AATreeKeyLevelType; 00072 00073 typedef struct AANode_t AANode; 00074 00078 struct AANode_t { 00079 union { 00087 void *data; 00092 size_t index; 00093 }; 00097 //AANode *left; 00101 //AANode *right; 00106 AATreeKeyLevelType level; 00112 AATreeKeyLevelType key; 00113 }; 00114 00124 extern AANode aaTerminatorNode; 00125 00130 #define AA_ROOT_NODE (&aaTerminatorNode) 00131 00139 #define AATreeIsEmpty(tree) ((tree) == &aaTerminatorNode) 00140 00148 struct AATreeRemovalData_t { 00152 AANode *lastNode; 00156 AANode *deletedNode; 00160 AATreeKeyLevelType key; 00161 }; 00162 00163 typedef struct AATreeRemovalData_t AATreeRemovalData; 00164 00173 AANode *AATreeFind(AANode *tree, AATreeKeyLevelType key); 00174 00186 AANode *AATreeAdd(AANode **tree, AATreeKeyLevelType key); 00187 00199 AANode *_AATreeRemove(AANode *tree, AATreeRemovalData *rd); 00200 00211 #define AATreeRemove(tree, key) if ((tree) != &aaTerminatorNode) { \ 00212 AANode *newRoot; \ 00213 AATreeRemovalData rd = { NULL, &aaTerminatorNode, key }; \ 00214 if ((newRoot = _AATreeRemove(tree, &rd)) != NULL) tree = newRoot; \ 00215 } 00216 00226 void AATreeDestroy(AANode *tree); 00227