...

Source file src/github.com/json-iterator/go/pool.go

Documentation: github.com/json-iterator/go

     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  }
    43  

View as plain text