From 568431f4c330b3a4f71e8295e3c05c6c4c308a0d Mon Sep 17 00:00:00 2001 From: Sasha Koshka Date: Sun, 18 May 2025 16:08:47 -0400 Subject: [PATCH] tape: Improve table decoding --- tape/table.go | 29 +++++++++++++---------------- 1 file changed, 13 insertions(+), 16 deletions(-) diff --git a/tape/table.go b/tape/table.go index 2128dc2..8bd85dc 100644 --- a/tape/table.go +++ b/tape/table.go @@ -1,27 +1,24 @@ package tape -import "iter" - // encoding and decoding functions must not make any allocations type TablePushFunc func(tag uint16, value []byte) (n int, err error) -func DecodeTable(data []byte) iter.Seq2[uint16, []byte] { - return func(yield func(tag uint16, value []byte) bool) { - n := 0 - for { - tag, nn, err := DecodeI16[uint16](data[n:]) - if err != nil { return } - n += nn +type TablePullFunc func() (tag uint16, value []byte, n int, err error) - length, nn, err := DecodeGBEU[uint64](data[n:]) - if err != nil { return } - n += nn +func DecodeTable(data []byte) TablePullFunc { + return func() (tag uint16, value []byte, n int, err error) { + tag, nn, err := DecodeI16[uint16](data[n:]) + if err != nil { return tag, value, n, err } + n += nn - value := data[n:n + int(length)] - yield(tag, value) - n += int(length) - } + length, nn, err := DecodeGBEU[uint64](data[n:]) + if err != nil { return tag, value, n, err } + n += nn + + value = data[n:n + int(length)] + n += int(length) + return tag, value, n, err } }