-// foster btree version e2
-// 18 JAN 2014
+// foster btree version e
+// 29 JAN 2014
// author: karl malbrain, malbrain@cal.berkeley.edu
unsigned char lvl:7; // level of page
unsigned char dirty:1; // page needs to be cleaned
unsigned char right[BtId]; // page number to right
- BtSlot table[0]; // the key slots
} *BtPage;
// mode & definition for hash latch implementation
// Access macros to address slot and key values from the page
-#define slotptr(page, slot) (page->table + slot-1)
+#define slotptr(page, slot) (((BtSlot *)(page+1)) + (slot-1))
#define keyptr(page, slot) ((BtKey)((unsigned char*)(page) + slotptr(page, slot)->off))
void bt_putid(unsigned char *dest, uid id)
// find and load page at given level for given key
// leave page rd or wr locked as requested
-int bt_loadpage (BtDb *bt, unsigned char *key, uint len, uint lvl, BtLock lock)
+uint bt_loadpage (BtDb *bt, unsigned char *key, uint len, uint lvl, BtLock lock)
{
uid page_no = ROOT_page, prevpage = 0;
BtLatchSet *set, *prevset;
if( keycmp (keyptr(bt->page,bt->page->cnt), key, len) < 0 ) {
page_no = bt_getid(bt->page->right);
+ foster = 1;
continue;
}