From d38be1d25bcf0e2955d64e1a6e2ea6e5e260ddad Mon Sep 17 00:00:00 2001 From: Ben Johnson Date: Wed, 29 Jan 2014 19:12:49 -0500 Subject: Add branch.split() --- leaf.go | 25 ++++++++++++------------- 1 file changed, 12 insertions(+), 13 deletions(-) (limited to 'leaf.go') diff --git a/leaf.go b/leaf.go index dcd343f..be5d447 100644 --- a/leaf.go +++ b/leaf.go @@ -6,13 +6,21 @@ import ( "unsafe" ) -// leaf represents a temporary in-memory leaf page. -// It is deserialized from an memory-mapped page and is not restricted by page size. +// leaf represents an in-memory, deserialized leaf page. type leaf struct { parent *branch items leafItems } +// size returns the size of the leaf after serialization. +func (l *leaf) size() int { + var size int = pageHeaderSize + for _, item := range l.items { + size += lnodeSize + len(item.key) + len(item.value) + } + return size +} + // put inserts or replaces a key on a leaf page. func (l *leaf) put(key []byte, value []byte) { // Find insertion index. @@ -29,15 +37,6 @@ func (l *leaf) put(key []byte, value []byte) { l.items[index].value = value } -// size returns the size of the leaf after serialization. -func (l *leaf) size() int { - var size int = pageHeaderSize - for _, item := range l.items { - size += lnodeSize + len(item.key) + len(item.value) - } - return size -} - // read initializes the item data from an on-disk page. func (l *leaf) read(p *page) { ncount := int(p.count) @@ -83,8 +82,8 @@ func (l *leaf) split(pageSize int) []*leaf { return []*leaf{l} } - // Set fill threshold to 25%. - threshold := pageSize >> 4 + // Set fill threshold to 50%. + threshold := pageSize / 2 // Otherwise group into smaller pages and target a given fill size. size := 0 -- cgit v1.2.3