/**
* 转载请注明出处, 由于个人技术能力有限, 英语水平欠缺,
* 有翻译不合适或错误的地方, 请纠正,
* 希望不要因为我的错误误导您, 希望您的智慧可以加入.
* @translator: selfimpr
* @mail: [email protected]
* @blog: http://blog.csdn.net/lgg201
*/
内存树数据库 API
typedef struct {
void *mmtx; // 锁 ( 互斥对象 )
TCTREE *tree; //TCTREE, 由此可以看出 , 内存树数据库是对 TCTREE 的简单封装 ( 主要是增加了锁的机制 ).
} TCNDB;
TCNDB *tcndbnew();
创建比较方法为默认的 tccmplexical, cmpop 为 NULL 的数据库
TCNDB *tcndbnew2(TCCMP cmp, void *cmpop);
创建一个 TCNDB 对象 , 出示化它的锁以及 tree 中的相关数据 (cmp 和 cmpop 参数请参见 TCTREE)
void tcndbdel(TCNDB *ndb);
删除指定数据库 , 对数据库记录的释放 , 调用的是 tctreedel
void tcndbput(TCNDB *ndb, const void *kbuf, int ksiz, const void *vbuf, int vsiz);
向数据库中存储一条记录 .
void tcndbput2(TCNDB *ndb, const char *kstr, const char *vstr);
tcndbput 的字符串版本
bool tcndbputkeep(TCNDB *ndb, const void *kbuf, int ksiz, const void *vbuf, int vsiz);
插入时如果该 key 已经有值 , 则无操作
bool tcndbputkeep2(TCNDB *ndb, const char *kstr, const char *vstr);
tcndbputkeep 的字符串版本
void tcndbputcat(TCNDB *ndb, const void *kbuf, int ksiz, const void *vbuf, int vsiz);
插入时 , 如果该 key 已经有值 , 则直接把新值追加到原始值后面存储 .
void tcndbputcat2(TCNDB *ndb, const char *kstr, const char *vstr);
tcndbputcat 的字符串版本
bool tcndbout(TCNDB *ndb, const void *kbuf, int ksiz);
从数据库中删除指定 key 的记录
bool tcndbout2(TCNDB *ndb, const void *kstr);
tcndbout 的 key 为字符串版本
void *tcndbget(TCNDB *ndb, const void *kbuf, int ksiz, int *sp);
从数据库中检索指定 key 对应的值 , 在函数返回使 sp 将会记录该值的大小
char *tcndbget2(TCNDB *ndb, const char *kstr);
tcndbget 的字符串版本
int tcndbvsiz(TCNDB *ndb, const void *kbuf, int ksiz);
获取数据库中指定 key 对应值的大小
int tcndbvsiz2(TNCDB *ndb, const char *kstr);
tcndbvsiz 的字符串版本
void tcndbiterinit(TNCDB *ndb);
初始化数据库迭代器
void *tcndbiternext(TCNDB *ndb, int *sp);
返回当前迭代点的 key 值 , sp 记录其大小 , 并将迭代点后移
char *tcndbiternext2(TCNDB *ndb);
tcndbiternext 的字符串版本
TCLIST *tcndbfwmkeys(TCNDB *ndb, const void *pbuf, int psiz, int max);
返回以指定 key 开头的最多 max 个 key 组成的列表对象 .
首先保存一份当前普通的迭代位置 , 然后调用 tctreeiterinit2 接口 ( 以指定 key 重置迭代接口 , 也就是将 tree 的 cur 指向其第一个以指定 key 开始的节点位置 ) 重置迭代接口 , 然后进行迭代获取到 max 个或所有的 key 并放入创建的 TCLIST 中 , 最后把原有的普通迭代位置还原 .
TCLIST *tcndbfwmkeys2(TCNDB *ndb, const char *pstr, int max);
tcndbfwmkeys 的字符串版本
uint64_t tcndbrnum(TCNDB *ndb);
返回数据库中的记录数
uint64_t tcndbmsiz(TCNDB *ndb);
返回数据库大小
int tcndbaddint(TCNDB *ndb, const void *kbuf, int ksiz, int num);
向数据库指定 key 对应的值上增加 num 并返回增加后的值
double tcndbadddouble(TNCDB *ndb, const void *kbuf, int ksiz, double num);
tcndbaddint 的 double 版
void tcndbvanish(TCNDB *ndb);
清空数据库
void tcndbcutfringe(TCNDB *ndb, int num);
删除数据库的 num 个外围节点 , 实际调用的是 tctreecutfringe.