Matteo Scandolo | a428586 | 2020-12-01 18:10:10 -0800 | [diff] [blame^] | 1 | package jsoniter |
| 2 | |
| 3 | import ( |
| 4 | "io" |
| 5 | ) |
| 6 | |
| 7 | // IteratorPool a thread safe pool of iterators with same configuration |
| 8 | type IteratorPool interface { |
| 9 | BorrowIterator(data []byte) *Iterator |
| 10 | ReturnIterator(iter *Iterator) |
| 11 | } |
| 12 | |
| 13 | // StreamPool a thread safe pool of streams with same configuration |
| 14 | type StreamPool interface { |
| 15 | BorrowStream(writer io.Writer) *Stream |
| 16 | ReturnStream(stream *Stream) |
| 17 | } |
| 18 | |
| 19 | func (cfg *frozenConfig) BorrowStream(writer io.Writer) *Stream { |
| 20 | stream := cfg.streamPool.Get().(*Stream) |
| 21 | stream.Reset(writer) |
| 22 | return stream |
| 23 | } |
| 24 | |
| 25 | func (cfg *frozenConfig) ReturnStream(stream *Stream) { |
| 26 | stream.out = nil |
| 27 | stream.Error = nil |
| 28 | stream.Attachment = nil |
| 29 | cfg.streamPool.Put(stream) |
| 30 | } |
| 31 | |
| 32 | func (cfg *frozenConfig) BorrowIterator(data []byte) *Iterator { |
| 33 | iter := cfg.iteratorPool.Get().(*Iterator) |
| 34 | iter.ResetBytes(data) |
| 35 | return iter |
| 36 | } |
| 37 | |
| 38 | func (cfg *frozenConfig) ReturnIterator(iter *Iterator) { |
| 39 | iter.Error = nil |
| 40 | iter.Attachment = nil |
| 41 | cfg.iteratorPool.Put(iter) |
| 42 | } |