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