X-Git-Url: http://www.sigaev.ru/git/gitweb.cgi?a=blobdiff_plain;f=tbtree.h;h=28d8837ac9a63ef7abd620d87ab4ef901d327853;hb=1ce28ee3043943d4f575214fb0a2b8cc76737321;hp=083d34cf326c3ea4bf7b352dc88a529e3133ea6f;hpb=ba7e1d079124ac7e5685a0cf918229d1a9a26735;p=tedtools.git diff --git a/tbtree.h b/tbtree.h index 083d34c..28d8837 100644 --- a/tbtree.h +++ b/tbtree.h @@ -32,11 +32,7 @@ #include - -/* C-utils */ -#ifndef offsetof -#define offsetof(type, field) ((int) &((type *)0)->field) -#endif /* offsetof */ +#include "tools.h" #define HASHSIZE(LEN) ( (LEN)<<1 ) /* end utils */ @@ -67,16 +63,16 @@ typedef struct { #define TBTPOINTERSIZE(db) PTRALIGN( (db->keylen) ? TBTPOINTERHRDSZ + db->keylen : sizeof(TBTPointer) ) #define ISINFPOINTER(db, page, ptr) ( (page)->isleaf==0 && (page)->rightlink == 0 && (char*)(ptr) == (page)->data + ((page)->npointer-1) * TBTPOINTERSIZE(db) ) +/* can changed up to 65536 */ #define TBTREEPAGESIZE 8192 #define TBTPAGEHDRSZ (2*sizeof(u_int32_t)) typedef struct { u_int32_t rightlink; u_int32_t - freespace:13, /* correlate to BTREEPAGESIZE */ - npointer:10, - isleaf:1, - unused: 8; + freespace:16, /* correlate to TBTREEPAGESIZE */ + npointer:15, + isleaf:1; char data[TBTREEPAGESIZE-TBTPAGEHDRSZ]; } TBTPage; @@ -151,9 +147,11 @@ typedef struct { } TBTIterator; int TBTInitIterator(TBTree *db, TBTIterator *iterator ); -int TBTInitPrefixIterator(TBTree *db, TBTIterator *iterator, TBTValue *key ); int TBTIterate(TBTree *db, TBTIterator *iterator, TBTValue *key, TBTValue *value ); void TBTFreeIterator(TBTree *db, TBTIterator *iterator); +int TBTGetFirst(TBTree *db, TBTValue *key, TBTValue *value); +int TBTGetLast(TBTree *db, TBTValue *key, TBTValue *value); + #endif