#define offsetof(type, field) ((int) &((type *)0)->field)
#endif /* offsetof */
-#define TYPEALIGN(ALIGNVAL,LEN) \
- (((long) (LEN) + (ALIGNVAL-1)) & ~((long) (ALIGNVAL-1)))
-
-#define PTRALIGN(LEN) TYPEALIGN(sizeof(void*), (LEN))
-
+#define HASHSIZE(LEN) ( (LEN)<<1 )
/* end utils */
unused:29;
struct TBTMemPage *prev;
struct TBTMemPage *next;
+ struct TBTMemPage *link;
TBTPage page;
} TBTMemPage;
-#define TBTMEMPAGEHDRSZ (sizeof(u_int32_t)*2 + sizeof(TBTMemPage*)*2 + TBTPAGEHDRSZ)
+#define TBTMEMPAGEHDRSZ (sizeof(u_int32_t)*2 + sizeof(TBTMemPage*)*3 + TBTPAGEHDRSZ)
typedef struct {
u_int16_t length;
char *value;
readonly:1,
keylen:11,
strategy:2,
- unused:18;
+ unused:2,
+ pointersize:16;
/* cache page subsystem */
u_int32_t npage;
int TBTFind(TBTree *db, TBTValue *key, TBTValue *value);
int TBTInsert(TBTree *db, TBTValue *key, TBTValue *value);
int TBTDelete(TBTree *db, TBTValue *key);
+
+/* debug function, assume key is int4 or string and values are strings */
void dumpTree(TBTree *db, u_int32_t pagenumber, int follow);
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);