Skip to content

Commit 90db7c7

Browse files
committed
db/datastruct/btindex: reduce allocs in encodeListNodes by writing directly to writer
1 parent 0008ec6 commit 90db7c7

1 file changed

Lines changed: 10 additions & 14 deletions

File tree

db/datastruct/btindex/bps_tree.go

Lines changed: 10 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -147,14 +147,18 @@ type Node struct {
147147
}
148148

149149
func encodeListNodes(nodes []Node, w io.Writer) error {
150-
numBuf := make([]byte, 8)
151-
binary.BigEndian.PutUint64(numBuf, uint64(len(nodes)))
152-
if _, err := w.Write(numBuf); err != nil {
150+
var hdr [10]byte
151+
binary.BigEndian.PutUint64(hdr[:8], uint64(len(nodes)))
152+
if _, err := w.Write(hdr[:8]); err != nil {
153153
return err
154154
}
155-
156-
for ni := 0; ni < len(nodes); ni++ {
157-
if _, err := w.Write(nodes[ni].Encode()); err != nil {
155+
for i := range nodes {
156+
binary.BigEndian.PutUint64(hdr[:8], nodes[i].di)
157+
binary.BigEndian.PutUint16(hdr[8:], uint16(len(nodes[i].key)))
158+
if _, err := w.Write(hdr[:]); err != nil {
159+
return err
160+
}
161+
if _, err := w.Write(nodes[i].key); err != nil {
158162
return err
159163
}
160164
}
@@ -175,14 +179,6 @@ func decodeListNodes(data []byte) ([]Node, error) {
175179
return nodes, nil
176180
}
177181

178-
func (n Node) Encode() []byte {
179-
buf := make([]byte, 8+2+len(n.key))
180-
binary.BigEndian.PutUint64(buf[:8], n.di)
181-
binary.BigEndian.PutUint16(buf[8:10], uint16(len(n.key)))
182-
copy(buf[10:], n.key)
183-
return buf
184-
}
185-
186182
func (n *Node) Decode(buf []byte) (uint64, error) {
187183
if len(buf) < 10 {
188184
return 0, errors.New("short buffer (less than 10b)")

0 commit comments

Comments
 (0)