From 6ac39437354a1a5093861497bade2d3ee0e760f5 Mon Sep 17 00:00:00 2001 From: "Bradley C. Kuszmaul" Date: Thu, 6 Dec 2007 12:00:24 +0000 Subject: [PATCH] Start making structs for the children. Addresses #126. git-svn-id: file:///svn/tokudb@957 c7de825b-a66e-492c-adef-691d508d4ae1 --- newbrt/brt-internal.h | 31 +++++++++++++++++++++++++++---- 1 file changed, 27 insertions(+), 4 deletions(-) diff --git a/newbrt/brt-internal.h b/newbrt/brt-internal.h index 8b883455bfd..8cd1ec021d6 100644 --- a/newbrt/brt-internal.h +++ b/newbrt/brt-internal.h @@ -25,6 +25,22 @@ enum { BUFFER_HEADER_SIZE = (4 // height// + 4 // n_children + TREE_FANOUT * 8 // children ) }; + +struct brtnode_nonleaf_pivotinfo { + struct kv_pair *pivotkey; /* For DUPSORT keys, the keys are whole key-value pairs. + * For nonduplicate and DUPSORT keys we have + * Child 0's keys <= pivotkey[0] < Child 1's keys <= pivotkey[1] < ... pivotkey[N-1] < child N's keys <= pivotkey[N] ... + */ + unsigned char pivotflags; +}; +struct brtnode_nonleaf_childinfo { + u_int32_t subtree_fingerprint; + DISKOFF diskoff; + HASHTABLE htable; + unsigned int n_bytes_in_hashtable; /* How many bytes are in each hashtable (including overheads for the disk-representation) */ + unsigned int n_cursors; +}; + typedef struct brtnode *BRTNODE; /* Internal nodes. */ struct brtnode { @@ -44,19 +60,26 @@ struct brtnode { struct nonleaf { // Don't actually store the subree fingerprint in the in-memory data structure. int n_children; /* if n_children==TREE_FANOUT+1 then the tree needs to be rebalanced. */ + unsigned int totalchildkeylens; + unsigned int n_bytes_in_hashtables; + +//#define CHSTRUCT +#ifdef CHSTRUCT + struct brtnode_nonleaf_pivotinfo pivots[TREE_FANOUT]; /* One extra one so we can grow. */ + struct brtnode_nonleaf_childinfo children[TREE_FANOUT+1]; /* One extra so we can grow */ +#else u_int32_t child_subtree_fingerprints[TREE_FANOUT+1]; struct kv_pair *childkeys[TREE_FANOUT]; /* Pivot keys. Child 0's keys are <= childkeys[0]. Child 1's keys are <= childkeys[1]. Note: It is possible that Child 1's keys are == to child 0's key's, so it is not necessarily true that child 1's keys are > childkeys[0]. However, in the absense of duplicate keys, child 1's keys *are* > childkeys[0]. */ unsigned int childkeylens[TREE_FANOUT]; - unsigned int totalchildkeylens; - unsigned char pivotflags[TREE_FANOUT]; + unsigned char pivotflags[TREE_FANOUT]; DISKOFF children[TREE_FANOUT+1]; /* unused if height==0 */ /* Note: The last element of these arrays is used only temporarily while splitting a node. */ HASHTABLE htables[TREE_FANOUT+1]; unsigned int n_bytes_in_hashtable[TREE_FANOUT+1]; /* how many bytes are in each hashtable (including overheads) */ - unsigned int n_bytes_in_hashtables; - unsigned int n_cursors[TREE_FANOUT+1]; + unsigned int n_cursors[TREE_FANOUT+1]; +#endif } n; struct leaf { PMA buffer;