aboutsummaryrefslogtreecommitdiffstats
path: root/vendor/github.com/json-iterator/go/pool.go
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/github.com/json-iterator/go/pool.go')
-rw-r--r--vendor/github.com/json-iterator/go/pool.go42
1 files changed, 42 insertions, 0 deletions
diff --git a/vendor/github.com/json-iterator/go/pool.go b/vendor/github.com/json-iterator/go/pool.go
new file mode 100644
index 0000000..e2389b5
--- /dev/null
+++ b/vendor/github.com/json-iterator/go/pool.go
@@ -0,0 +1,42 @@
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}