libmove3d  3.13.0
/home/slemaign/softs-local/BioMove3D-git/include/ebt.h
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 
 All Classes Files Functions Variables Typedefs Enumerations Enumerator Friends Defines