pool.go (956B)
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 }