- 論壇徽章:
- 0
|
用于對(duì)需要永久存儲(chǔ) 而且需要查找和排序的int類(lèi)數(shù)據(jù),好處是減少?gòu)奈募x數(shù)據(jù)在內(nèi)存構(gòu)建紅黑樹(shù)的時(shí)間 另外使用mmap保證修改內(nèi)存后磁盤(pán)文件會(huì)同步,無(wú)須手動(dòng)sync和再次寫(xiě)入文件。
一個(gè) mmtree文件里可以構(gòu)件2G個(gè)樹(shù)節(jié)點(diǎn).
可以通過(guò)mmtree_new_tree()生成新的樹(shù).
mmtree_insert() 寫(xiě)入新節(jié)點(diǎn) 如果old返回為非空表示存在該節(jié)點(diǎn)。
mmtree_find() 查找節(jié)點(diǎn)
mmtree_remove() 移除節(jié)點(diǎn)
。。。。
鏈接:
http://hispider.googlecode.com/s ... /src/utils/mmtree.h
http://hispider.googlecode.com/s ... /src/utils/mmtree.c
多線(xiàn)程使用添加這個(gè)文件 并且添加編譯選項(xiàng) -DHAVE_PTHREAD
http://hispider.googlecode.com/s ... /src/utils/mutext.h
應(yīng)某同學(xué)的建議放一個(gè)打包上來(lái),代碼測(cè)試有問(wèn)題盡快告訴我。
mmtree.h
- #ifndef _MMTREE_H
- #define _MMTREE_H
- #define MMTREE_INCRE_NUM 10000
- typedef struct _MTNODE
- {
- int data;
- int key;
- int left;
- int right;
- int parent;
- int color;
- }MTNODE;
- typedef struct _MTSTATE
- {
- int left;
- int current;
- int total;
- int qleft;
- int qfirst;
- int qlast;
- }MTSTATE;
- typedef struct _MMTREE
- {
- off_t size;
- void *start;
- MTSTATE *state;
- MTNODE *map;
- int fd;
- void *mutex;
- }MMTREE;
- void *mmtree_init(char *file);
- int mmtree_new_tree(void *mmtree, int key, int data);
- int mmtree_insert(void *mmtree, int *prootid, int key, int data, int *old);
- int mmtree_get(void *mmtree, int nodeid, int *key, int *data);
- int mmtree_find(void *mmtree, int rootid, int key, int *data);
- int mmtree_min(void *mmtree, int rootid, int *key, int *data);
- int mmtree_max(void *mmtree, int rootid, int *key, int *data);
- int mmtree_next(void *mmtree, int rootid, int nodeid, int *key, int *data);
- int mmtree_prev(void *mmtree, int rootid, int nodeid, int *key, int *data);
- int mmtree_set_data(void *mmtree, int nodeid, int data);
- void mmtree_view_tree(void *mmtree, int rootid, FILE *fp);
- void mmtree_remove(void *mmtree, int *prootid, int nodeid, int *key, int *data);
- void mmtree_remove_tree(void *mmtree, int rootid);
- void mmtree_close(void *mmtree);
- #endif
復(fù)制代碼
[ 本帖最后由 redor 于 2009-9-29 15:53 編輯 ] |
-
-
mmtree.zip
2009-09-29 15:53 上傳
點(diǎn)擊文件名下載附件
5.35 KB, 下載次數(shù): 257
|