From fe791889d5a9654d5c3f5a2cdbc0fd92c18c9073 Mon Sep 17 00:00:00 2001 From: Andy Arthur Date: Fri, 4 Feb 2022 16:11:03 -0800 Subject: [PATCH] pr feedback on node construction --- go/store/prolly/node.go | 29 +++++++++++++++-------------- 1 file changed, 15 insertions(+), 14 deletions(-) diff --git a/go/store/prolly/node.go b/go/store/prolly/node.go index 0c4358c188..53aa3dd582 100644 --- a/go/store/prolly/node.go +++ b/go/store/prolly/node.go @@ -30,7 +30,7 @@ const ( ) func init() { - emptyNode = makeMapNode(sharedPool, 0, nil, nil) + //emptyNode = makeMapNode(sharedPool, 0, nil, nil) } type Node struct { @@ -51,21 +51,18 @@ func makeMapNode(pool pool.BuffPool, level uint64, keys, values []nodeItem) (nod b := getMapBuilder(pool, bufSz) // serialize keys and offsets - serial.TupleMapStartKeyTuplesVector(b, keySz) - keyTups = b.EndVector(writeItems(b, keys)) + keyTups = writeItemBytes(b, keys, keySz) serial.TupleMapStartKeyOffsetsVector(b, len(keys)-1) keyOffs = b.EndVector(writeItemOffsets(b, keys, keySz)) if level == 0 { // serialize ref tuples for leaf nodes - serial.TupleMapStartKeyTuplesVector(b, valSz) - valTups = b.EndVector(writeItems(b, values)) + valTups = writeItemBytes(b, values, valSz) serial.TupleMapStartValueOffsetsVector(b, len(values)-1) valOffs = b.EndVector(writeItemOffsets(b, values, valSz)) } else { // serialize child refs for internal nodes - serial.TupleMapStartRefArrayVector(b, valSz) - refArr = b.EndVector(writeItems(b, values)) + refArr = writeItemBytes(b, values, valSz) } // populate the node's vtable @@ -108,14 +105,18 @@ func measureNodeSize(keys, values []nodeItem) (keySz, valSz, bufSz int) { return } -func writeItems(b *fb.Builder, items []nodeItem) (cnt int) { - for i := len(items) - 1; i >= 0; i-- { - for j := len(items[i]) - 1; j >= 0; j-- { - b.PrependByte(items[i][j]) - cnt++ - } +func writeItemBytes(b *fb.Builder, items []nodeItem, sumSz int) fb.UOffsetT { + b.Prep(fb.SizeUOffsetT, sumSz) + + stop := int(b.Head()) + start := stop - sumSz + for _, item := range items { + copy(b.Bytes[start:stop], item) + start += len(item) } - return + + start = stop - sumSz + return b.CreateByteVector(b.Bytes[start:stop]) } func writeItemOffsets(b *fb.Builder, items []nodeItem, sz int) (cnt int) {