@@ -18,7 +18,7 @@ const (
1818// BitReader wraps github.com/markus-wa/gobitread.BitReader and provides additional functionality specific to CS:GO demos.
1919type BitReader struct {
2020 bitread.BitReader
21- buffer []byte
21+ buffer * []byte
2222}
2323
2424// ReadString reads a variable length string.
@@ -86,32 +86,35 @@ var bitReaderPool sync.Pool = sync.Pool{
8686// Pooling BitReaders improves performance by minimizing the amount newly allocated readers.
8787func (r * BitReader ) Pool () {
8888 r .Close ()
89- if len (r .buffer ) == smallBuffer {
89+ if len (* r .buffer ) == smallBuffer {
9090 smallBufferPool .Put (r .buffer )
9191 }
9292 r .buffer = nil
93+
9394 bitReaderPool .Put (r )
9495}
9596
96- func newBitReader (underlying io.Reader , buffer []byte ) * BitReader {
97+ func newBitReader (underlying io.Reader , buffer * []byte ) * BitReader {
9798 br := bitReaderPool .Get ().(* BitReader )
9899 br .buffer = buffer
99- br .OpenWithBuffer (underlying , buffer )
100+ br .OpenWithBuffer (underlying , * buffer )
100101 return br
101102}
102103
103104var smallBufferPool sync.Pool = sync.Pool {
104105 New : func () interface {} {
105- return make ([]byte , smallBuffer )
106+ b := make ([]byte , smallBuffer )
107+ return & b
106108 },
107109}
108110
109111// NewSmallBitReader returns a BitReader with a small buffer, suitable for short streams.
110112func NewSmallBitReader (underlying io.Reader ) * BitReader {
111- return newBitReader (underlying , smallBufferPool .Get ().([]byte ))
113+ return newBitReader (underlying , smallBufferPool .Get ().(* []byte ))
112114}
113115
114116// NewLargeBitReader returns a BitReader with a large buffer, suitable for long streams (main demo file).
115117func NewLargeBitReader (underlying io.Reader ) * BitReader {
116- return newBitReader (underlying , make ([]byte , largeBuffer ))
118+ b := make ([]byte , largeBuffer )
119+ return newBitReader (underlying , & b )
117120}
0 commit comments