add bulk memory operations and memtest
[tedtools.git] / tbtree.h
index fa11321..083d34c 100644 (file)
--- a/tbtree.h
+++ b/tbtree.h
 #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 */
 
 
@@ -84,17 +80,20 @@ typedef struct {
        char    data[TBTREEPAGESIZE-TBTPAGEHDRSZ];      
 } TBTPage;
 
-typedef struct {
+typedef struct TBTMemPage {
        u_int32_t       pagenumber;
-       struct timeval last;
        u_int32_t
                issynced:1,
                iscached:1,
                islocked:1,
                unused:29;
+       struct TBTMemPage *prev;
+       struct TBTMemPage *next;
+       struct TBTMemPage *link;
        TBTPage page;
 } TBTMemPage;
 
+#define TBTMEMPAGEHDRSZ (sizeof(u_int32_t)*2 + sizeof(TBTMemPage*)*3 + TBTPAGEHDRSZ)
 typedef struct {
        u_int16_t       length;
        char            *value;
@@ -113,13 +112,15 @@ typedef struct {
                readonly:1,
                keylen:11,
                strategy:2,
-               unused:18;
+               unused:2,
+               pointersize:16;
 
        /* cache page subsystem */
        u_int32_t       npage;
        u_int32_t       curpage;
        TBTMemPage      **Cache;
-       TBTMemPage      **TimeCache;
+       TBTMemPage      *TimeCache;
+       TBTMemPage      *TimeCacheLast;
        u_int32_t       lastpagenumber;
 
        /* stat subsystem */
@@ -140,6 +141,8 @@ int TBTSync(TBTree *db) ;
 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 {
@@ -148,6 +151,7 @@ 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);