@@ -3,7 +3,6 @@ package dod
33import (
44 "encoding/binary"
55 "math"
6- "slices"
76
87 "github.com/parquet-go/bitpack"
98 "github.com/parquet-go/bitpack/unsafecast"
@@ -19,10 +18,11 @@ func EncodeUInt64(dst []byte, src []uint64) []byte {
1918 case 0 :
2019 return dst
2120 case 1 :
22- offset := len (dst )
23- dst = slices .Grow (dst , delta .HeaderSize )[:len (dst )+ delta .HeaderSize ]
24- out := dst [offset :]
25- delta .EncodeHeader (out , 1 , int64 (src [0 ]), 0 )
21+ if cap (dst ) < delta .HeaderSize {
22+ dst = make ([]byte , delta .HeaderSize )
23+ }
24+ dst = dst [:delta .HeaderSize ]
25+ delta .EncodeHeader (dst , 1 , int64 (src [0 ]), 0 )
2626 return dst
2727 }
2828
@@ -49,15 +49,14 @@ func EncodeUInt64(dst []byte, src []uint64) []byte {
4949
5050 packedSize := bitpack .ByteCount (uint ((len (encoded ) - 1 ) * bitWidth ))
5151 totalSize := packedSize + delta .Int64SizeBytes + delta .HeaderSize + bitpack .PaddingInt64
52- offset := len (dst )
53- dst = slices .Grow (dst , totalSize )[:len (dst )+ totalSize ]
54- out := dst [offset :]
55-
56- delta .EncodeHeader (out , uint16 (len (src )), minVal , uint8 (bitWidth ))
52+ if cap (dst ) < totalSize {
53+ dst = make ([]byte , totalSize )
54+ }
5755
5856 // Encode the first value as is and bitpack the rest.
59- binary .LittleEndian .PutUint64 (out [delta .HeaderSize :delta .HeaderSize + delta .Int64SizeBytes ], uint64 (encoded [0 ]))
60- bitpack .Pack (out [delta .HeaderSize + delta .Int64SizeBytes :], unsafecast.Slice [int64 ](encoded [1 :]), uint (bitWidth ))
57+ delta .EncodeHeader (dst , uint16 (len (src )), minVal , uint8 (bitWidth ))
58+ binary .LittleEndian .PutUint64 (dst [delta .HeaderSize :delta .HeaderSize + delta .Int64SizeBytes ], uint64 (encoded [0 ]))
59+ bitpack .Pack (dst [delta .HeaderSize + delta .Int64SizeBytes :], unsafecast.Slice [int64 ](encoded [1 :]), uint (bitWidth ))
6160
6261 return dst
6362}
0 commit comments