void* mydata_unserialize(char *buf, unsigned int buflen)
{
struct MyData *d = (struct MyData *) malloc(sizeof(struct MyData));
sscanf(buf, "%d %f", &(d->a), &(d->b));
return d;
}
int main()
{
struct TreeDBHook hook = { mydata_new, mydata_delete, mydata_serialize, mydata_unserialize };
struct TreeDB *tdb;
struct MyData *d;
struct TreeDBIter *iter;
tdb = tdb_open("./tmpdb", &hook);
// new leafnode
d = (struct MyData *) tdb_leafnode_get_data(tdb, "task/2010/spring");
d->a = 1001;
tdb_leafnode_commit(tdb, "task/2010/spring");
d = (struct MyData *) tdb_leafnode_get_data(tdb, "task/2010/summon");
d->a = 1002;
tdb_leafnode_commit(tdb, "task/2010/summon");
d = (struct MyData *) tdb_leafnode_get_data(tdb, "task/2010/autumn");
d->a = 1003;
tdb_leafnode_commit(tdb, "task/2010/autumn");
d = (struct MyData *) tdb_leafnode_get_data(tdb, "task/2011/winter");
d->a = 1004;
tdb_leafnode_commit(tdb, "task/2011/winter");
tdb_walk(tdb);
// iterate one midnode's leafnodes
printf("========== iter ==========\n");
iter = tdb_midnode_new_iter(tdb, "task/2010");
if ( iter )
{
while ( tdb_midnode_iter_has_next(iter) )
{
const char *key;
d = (struct MyData *) tdb_midnode_iter_next(iter, &key);
printf("%s: %d, %f\n", key, d->a, d->b);
}
}
tdb_midnode_del_iter(iter);
printf("========== end iter ==========\n");
// delete leafnode
tdb_leafnode_delete(tdb, "task/2010/spring");
tdb_walk(tdb);
// delete midnode
tdb_midnode_delete(tdb, "task/2010");
tdb_walk(tdb);
tdb_sync(tdb);
tdb_close(tdb);
return 0;
}
评论