diff options
author | cathook <cat.hook31894@gmail.com> | 2013-12-17 03:41:02 +0800 |
---|---|---|
committer | cathook <cat.hook31894@gmail.com> | 2013-12-17 03:41:02 +0800 |
commit | fbfeea083797df629a314e447b173b5ee6f00d78 (patch) | |
tree | fbea9388ca20d7f23025dfd8e312411dc59a169b | |
parent | 1453386379c010d95783731fbb73152e4f2d5f6b (diff) | |
download | ctl-fbfeea083797df629a314e447b173b5ee6f00d78.tar.gz ctl-fbfeea083797df629a314e447b173b5ee6f00d78.tar.zst ctl-fbfeea083797df629a314e447b173b5ee6f00d78.zip |
can compile
-rw-r--r-- | src/sptree.c | 40 |
1 files changed, 20 insertions, 20 deletions
diff --git a/src/sptree.c b/src/sptree.c index 9401bd4..5635c82 100644 --- a/src/sptree.c +++ b/src/sptree.c @@ -1,4 +1,5 @@ #include "sptree.h" +#include "utility.h" #include <string.h> @@ -11,7 +12,7 @@ struct StructSplayTree{ struct StructSplayTreeNode* root; key_cmp func; }; -struct StructSpalyTreeNode{ +struct StructSplayTreeNode{ struct StructSplayTreeNode* lchd; struct StructSplayTreeNode* rchd; struct StructSplayTreeNode* fath; @@ -19,19 +20,19 @@ struct StructSpalyTreeNode{ pvoid* val; }; -typedef struct StructSpalyTree SplayTree; -typedef struct StructSpalyTreeNode SplayTreeNode; +typedef struct StructSplayTree SplayTree; +typedef struct StructSplayTreeNode SplayTreeNode; /******************* static functions *********************/ -static void delete_dfs(SplayTreeNode* nd); +static void delete_dfs(SplayTreeNode* nd); static SplayTreeNode* access_node(key_cmp f, SplayTreeNode* nd, pcvoid k); -static SplayTreeNode* split_node(key_cmp f, SplayTreeNode* nd, pcvoid k, - SplayTreeNode** l, SplayTreeNode** r); +static SplayTreeNode* split_node (key_cmp f, SplayTreeNode* nd, pcvoid k, + SplayTreeNode** l, SplayTreeNode** r); static SplayTreeNode* access_max(SplayTreeNode *nd); -static SplayTreeNode* merge_node(key_cmp f, SplayTreeNode* l, SplayTreeNode* r); +static SplayTreeNode* merge_node(SplayTreeNode* l, SplayTreeNode* r); #define getHeader(A) ((SplayTree*)(A)) -#define getSize(A) (sizeof(StructSplayTreeNode)+(A)->key_size+(A)->val_size) +#define getSize(A) (sizeof(SplayTreeNode)+(A)->key_size+(A)->val_size) #define connectL(A,B) \ do{\ if((A) != NULL) (A)->lchd = (B);\ @@ -65,7 +66,7 @@ pvoid ctl_sptree_initX(ppvoid sp, uint k_size, uint v_size, key_cmp f){ pvoid ctl_sptree_freeX(ppvoid sp){ SplayTree* head = (SplayTree*)*sp; if(head->root != NULL) delete_dfs(head->root); - free(head); + ctl_free(pVoid(head)); *sp = NULL; return NULL; } @@ -84,7 +85,7 @@ uint ctl_sptree_getValSizeX(ppcvoid sp){ /******************* splay tree's methods *****************/ pvoid ctl_sptree_findX(ppvoid sp, pcvoid key){ SplayTree* head = getHeader(*sp); - SplayTreeNode* nd = access_node(head->root, key, head->func); + SplayTreeNode* nd = access_node(head->func, head->root, key); if(head->root != NULL) while(head->root->fath != NULL) head->root = head->root->fath; @@ -94,8 +95,8 @@ pvoid ctl_sptree_findX(ppvoid sp, pcvoid key){ pvoid ctl_sptree_addX(ppvoid sp, pcvoid key, pvoid val){ SplayTree* head = getHeader(*sp); SplayTreeNode* lft; - SplayTreeNode* rgt; - SplayTreeNode* mid = split_node(head->f, head->root, key, &lft, &rgh); + SplayTreeNode* rgh; + SplayTreeNode* mid = split_node(head->func, head->root, key, &lft, &rgh); if(mid != NULL){ memcpy(mid->val, val, head->val_size); head->root = merge_node(lft, rgh); @@ -114,7 +115,7 @@ void ctl_sptree_delX(ppvoid sp, pcvoid key){ SplayTree* head = getHeader(*sp); SplayTreeNode* left; SplayTreeNode* righ; - access_node(head->func, head, key); + access_node(head->func, head->root, key); if(head->root != NULL) while(head->root->fath != NULL) head->root = head->root->fath; @@ -122,7 +123,7 @@ void ctl_sptree_delX(ppvoid sp, pcvoid key){ righ = head->root->rchd; disconnL(head->root); disconnR(head->root); - free(head->root); + ctl_free(pVoid(head->root)); head->root = merge_node(left, righ); } @@ -132,7 +133,7 @@ void ctl_sptree_splitX(ppvoid sp , pcvoid key, ppvoid l, ppvoid r){ ctl_sptree_initX(r, head->key_size, head->val_size, head->func); SplayTreeNode* left; SplayTreeNode* righ; - split_node(head->f, head->root, key, &left, &righ); + split_node(head->func, head->root, key, &left, &righ); getHeader(*r)->root = left; getHeader(*l)->root = righ; head->root = NULL; @@ -145,10 +146,10 @@ pvoid ctl_sptree_mergeX(ppvoid sp1, ppvoid sp2){ head2->root = NULL; ctl_sptree_freeX(sp2); *sp1 = NULL; - return pVoid(head); + return pVoid(head1); } -void ctl_sptree_clearX(ppvoid* sp){ +void ctl_sptree_clearX(ppvoid sp){ if(getHeader(*sp)->root != NULL) delete_dfs(getHeader(*sp)->root); getHeader(*sp)->root = NULL; @@ -159,7 +160,7 @@ void ctl_sptree_clearX(ppvoid* sp){ static void delete_dfs(SplayTreeNode* nd){ if(nd->lchd != NULL) delete_dfs(nd->lchd); if(nd->rchd != NULL) delete_dfs(nd->rchd); - free(nd); + ctl_free(pVoid(nd)); } static SplayTreeNode* access_node(key_cmp f, SplayTreeNode* nd, pcvoid k){ if(nd == NULL) return NULL; @@ -231,8 +232,7 @@ static SplayTreeNode* access_max(SplayTreeNode *nd){ return nd; } } -static SplayTreeNode* merge_node(key_cmp f, - SplayTreeNode* l, SplayTreeNode* r){ +static SplayTreeNode* merge_node(SplayTreeNode* l, SplayTreeNode* r){ l = access_max(l); if(l == NULL) return r; connectR(l, r); |