| package jsoniter | |
| import ( | |
| "io" | |
| ) | |
| // IteratorPool a thread safe pool of iterators with same configuration | |
| type IteratorPool interface { | |
| BorrowIterator(data []byte) *Iterator | |
| ReturnIterator(iter *Iterator) | |
| } | |
| // StreamPool a thread safe pool of streams with same configuration | |
| type StreamPool interface { | |
| BorrowStream(writer io.Writer) *Stream | |
| ReturnStream(stream *Stream) | |
| } | |
| func (cfg *frozenConfig) BorrowStream(writer io.Writer) *Stream { | |
| stream := cfg.streamPool.Get().(*Stream) | |
| stream.Reset(writer) | |
| return stream | |
| } | |
| func (cfg *frozenConfig) ReturnStream(stream *Stream) { | |
| stream.out = nil | |
| stream.Error = nil | |
| stream.Attachment = nil | |
| cfg.streamPool.Put(stream) | |
| } | |
| func (cfg *frozenConfig) BorrowIterator(data []byte) *Iterator { | |
| iter := cfg.iteratorPool.Get().(*Iterator) | |
| iter.ResetBytes(data) | |
| return iter | |
| } | |
| func (cfg *frozenConfig) ReturnIterator(iter *Iterator) { | |
| iter.Error = nil | |
| iter.Attachment = nil | |
| cfg.iteratorPool.Put(iter) | |
| } |