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