aatree.h

Go to the documentation of this file.
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 

Generated on Mon May 28 04:41:38 2007 for Retro Tank Super Attack by  doxygen 1.5.2