libmove3d
3.13.0
|
00001 #ifndef EBT_INCLUDE 00002 #define EBT_INCLUDE 1 00003 00004 #ifndef EBT_FREE 00005 #define EBT_FREE(s) ((s)?free(s):(void)NULL) 00006 #endif 00007 00008 #ifndef TALLOC 00009 #define TALLOC(type,n) (type *) calloc(n,sizeof(type)) 00010 #endif 00011 00012 #ifndef RETALLOC 00013 #define RETALLOC(type,n,ptr) (type *)realloc(ptr,(n)*sizeof(type)) 00014 #endif 00015 00016 00017 00018 /**********************************************************************/ 00019 00020 typedef struct ebtnode EBTNode , *pEBTNode; 00021 00022 struct ebtnode { 00023 pEBTNode left; 00024 pEBTNode right; 00025 char *key; 00026 short bal; 00027 }; 00028 00029 /**********************************************************************/ 00030 00031 #define L_BAL -1 00032 #define E_BAL 0 00033 #define R_BAL 1 00034 00035 #define HEIGHT_NO_MODIFIED 0 00036 #define HEIGHT_MODIFIED 1 00037 00038 /**********************************************************************/ 00039 00040 #define EBT_SET_LEFT(n,nl) ((n)->left = nl) 00041 #define EBT_SET_RIGHT(n,nr) ((n)->right = (nr)) 00042 #define EBT_SET_KEY(n,k) ((n)->key = (k)) 00043 #define EBT_SET_BAL(n,b) ((n)->bal = (b)) 00044 00045 #define EBT_GET_LEFT(n) ((n)->left) 00046 #define EBT_GET_RIGHT(n) ((n)->right) 00047 #define EBT_GET_BAL(n) ((n)->bal) 00048 #define EBT_GET_KEY(n) ((n)->key) 00049 00050 #define EBT_ADD_LEFT(n,key) (((n)->bal)--,(n)->left=MakeNode(key)) 00051 #define EBT_ADD_RIGHT(n,key) (((n)->bal)++,(n)->right=MakeNode(key)) 00052 #define EBT_ADD_BAL(n,val) (((n)->bal) += val) 00053 #define EBT_DEL_LEFT(n) (((n)->bal)++,MY_FREE((n)->left,EBTNode,1),(n)->left=NULL) 00054 #define EBT_DEL_RIGHT(n) (((n)->bal)--,MY_FREE((n)->right,EBTNode,1),(n)->right=NULL) 00055 00056 #define EBT_BAL_EQUILIBRATED(bal) (abs(bal) > 1 ? FALSE : TRUE) 00057 00058 #define EBT_GET_SON(n,sens) ((sens)==L_BAL ? (n)->left : (n)->right) 00059 #define EBT_GET_SON_ADDR(n,sens) ((sens)==L_BAL ? &(n)->left : &(n)->right) 00060 #define EBT_GET_OTHERSON(n,sens)((sens)==L_BAL ? (n)->right : (n)->left) 00061 #define EBT_ADD_SON(n,sens,key) ((sens)==L_BAL ? EBT_ADD_LEFT(n,key) : \ 00062 EBT_ADD_RIGHT(n,key)) 00063 00064 00065 /**********************************************************************/ 00066 00067 00068 00069 #define EBT_EMPTY(open) ((open) == NULL ? TRUE : FALSE) 00070 00071 #define EBT_INSERT(node,open) ( \ 00072 (void)EBTInsertNode((pEBTNode *)(open),(char *)(node),ebtBestNode)) 00073 // need to set (node)->opened = TRUE, (node)->closed = TRUE after 00074 00075 #define EBT_GET_BEST(node,open) ( \ 00076 (node) = (p3d_node *)EBTFindDeleteFirstNode((pEBTNode *)(open))) 00077 // need to set (node)->opened = FALSE after 00078 00079 #define EBT_DELETE(node,open) ( \ 00080 (void)EBTDeleteNode((pEBTNode *)(open),(char *)(node),ebtBestNode), \ 00081 (node)->opened = FALSE) 00082 00083 #define EBT_CLOSED(node) ((node)->closed == TRUE ? TRUE : FALSE) 00084 #define EBT_OPENED(node) ((node)->opened == TRUE ? TRUE : FALSE) 00085 00086 //start path deform 00087 #define EBT_INSERT_PATH(node,open) ( \ 00088 (void)EBTInsertNode((pEBTNode *)(open),(char *)(node),BestPath), \ 00089 (node)->opened = TRUE, (node)->closed = TRUE) 00090 00091 #define EBT_GET_BEST_PATH(node,open) ( \ 00092 (node) = (p3d_path_nodes *)EBTFindDeleteFirstNode((pEBTNode *)(open))) 00093 // need to set (node)->opened = FALSE after 00094 00095 //end path deform 00096 00097 #endif 00098 00099