gtsocial-umbx

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs | README | LICENSE

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 }