mirror of https://github.com/gogits/gogs.git
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
42 lines
956 B
42 lines
956 B
package jsoniter |
|
|
|
import ( |
|
"io" |
|
) |
|
|
|
// IteratorPool a thread safe pool of iterators with same configuration |
|
type IteratorPool interface { |
|
BorrowIterator(data []byte) *Iterator |
|
ReturnIterator(iter *Iterator) |
|
} |
|
|
|
// StreamPool a thread safe pool of streams with same configuration |
|
type StreamPool interface { |
|
BorrowStream(writer io.Writer) *Stream |
|
ReturnStream(stream *Stream) |
|
} |
|
|
|
func (cfg *frozenConfig) BorrowStream(writer io.Writer) *Stream { |
|
stream := cfg.streamPool.Get().(*Stream) |
|
stream.Reset(writer) |
|
return stream |
|
} |
|
|
|
func (cfg *frozenConfig) ReturnStream(stream *Stream) { |
|
stream.out = nil |
|
stream.Error = nil |
|
stream.Attachment = nil |
|
cfg.streamPool.Put(stream) |
|
} |
|
|
|
func (cfg *frozenConfig) BorrowIterator(data []byte) *Iterator { |
|
iter := cfg.iteratorPool.Get().(*Iterator) |
|
iter.ResetBytes(data) |
|
return iter |
|
} |
|
|
|
func (cfg *frozenConfig) ReturnIterator(iter *Iterator) { |
|
iter.Error = nil |
|
iter.Attachment = nil |
|
cfg.iteratorPool.Put(iter) |
|
}
|
|
|