メインページ | アルファベット順一覧 | 構成 | ファイル一覧 | 構成メンバ | ファイルメンバ | 関連ページ

dkcRedBlackTree.c

Red Black Tree [詳細]

#include "dkcRedBlackTree.h"

dkcRedBlackTree.cのインクルード依存関係図

ソースコードを見る。

関数

DKC_INLINE DKC_RB_TREE_ROOT
*WINAPI 
dkcAllocRedBlackTreeRoot (size_t node_max, size_t pool_max, DKC_RED_BLACK_TREE_DESTRUCTOR_F_TYPE destructor_)
int WINAPI dkcFreeRedBlackTreeRoot (DKC_RB_TREE_ROOT **ptr)
void WINAPI dkcRedBlackTreeAllErase (DKC_RB_TREE_ROOT *p)
 すべてのノードを削除する。


説明

Red Black Tree

作者:
d金魚

dkcRedBlackTree.c で定義されています。


関数

DKC_INLINE DKC_RB_TREE_ROOT* WINAPI dkcAllocRedBlackTreeRoot size_t  node_max,
size_t  pool_max,
DKC_RED_BLACK_TREE_DESTRUCTOR_F_TYPE  destructor_
 

引数:
node_max[in] 確保されたRootが確保できるnodeの数
pool_max[in] 内部で使うノードプールの最大数
destructor_[in] dkcRedBlackTreeAllErase()等でで使用されるDKC_RED_BLACK_NODEのdataメンバに対する開放関数を登録する。
戻り値:
メモリ領域が確保された Red Black Tree オブジェクトへのポインタ。NULLで失敗
覚え書き:
node_maxとpool_maxを同じにするとすべてのノードがプールされて メモリ確保処理がすべて簡略化される分処理が安定して高速になります。 ですが、メモリとの兼ね合いを考えてください。

dkcRedBlackTree.c12 行で定義されています。

参照先 dkc_RedBlackRoot::destructor, dkcAllocate(), dkcAllocSameObjectPool(), dkcFree(), dkcmREDBLACKTREE_NIL, dkcRedBlackTreeInitSentinelNode(), dkc_RedBlackRoot::node_count, dkc_RedBlackRoot::node_max, dkc_RedBlackRoot::node_pool, NULL, と dkc_RedBlackRoot::root.

00014 {
00015     DKC_RB_TREE_ROOT *p;
00016     if(NULL==destructor_) return NULL;
00017     p = dkcAllocate(sizeof(DKC_RB_TREE_ROOT));
00018     if(NULL==p) return NULL;
00019 
00020     dkcRedBlackTreeInitSentinelNode(
00021         dkcmREDBLACKTREE_NIL(p)
00022     );
00023 
00024     p->root = dkcmREDBLACKTREE_NIL(p);
00025     p->node_pool = dkcAllocSameObjectPool(
00026         sizeof(DKC_RED_BLACK_NODE),pool_max,NULL,NULL
00027     );
00028     if(NULL==p->node_pool){
00029         goto Error;
00030     }
00031     p->node_max = node_max;
00032     p->node_count = 0;
00033     p->destructor = destructor_;
00034     return p;
00035 Error:
00036     dkcFree(&p);
00037     return NULL;
00038 }

int WINAPI dkcFreeRedBlackTreeRoot DKC_RB_TREE_ROOT **  ptr  ) 
 

dkcRedBlackTree.c40 行で定義されています。

参照先 dkcFree(), dkcFreeSameObjectPool(), dkcRedBlackTreeAllErase(), dkc_RedBlackRoot::node_pool, と NULL.

00041 {
00042     if(NULL==ptr || NULL==*ptr)
00043     {
00044         return edk_ArgumentException;
00045     }
00046 
00047     {
00048         DKC_RB_TREE_ROOT *p = *ptr;
00049         
00050         dkcRedBlackTreeAllErase(p);
00051 
00052         dkcFreeSameObjectPool(&(p->node_pool));
00053     }
00054     return dkcFree(ptr);
00055 }

void WINAPI dkcRedBlackTreeAllErase DKC_RB_TREE_ROOT p  ) 
 

すべてのノードを削除する。

dkcRedBlackTree.c57 行で定義されています。

参照先 dkc_RedBlackRoot::destructor, dkcRedBlackTree_deleteNode(), dkc_RedBlackRoot::node_count, NULL, と dkc_RedBlackRoot::root.

参照元 dkcFreeRedBlackTreeRoot().

00058 {
00059     rb_tree_data_type data = NULL;
00060     while(p->node_count != 0)
00061     {
00062         dkcRedBlackTree_deleteNode(p,p->root,&data);
00063         p->destructor(data);
00064     }
00065 
00066 }


dkutil_cに対してMon Jan 16 00:42:57 2006に生成されました。  doxygen 1.4.4