feature_pool.go 735 B

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. package jsoniter
  2. import (
  3. "io"
  4. )
  5. func (cfg *frozenConfig) BorrowStream(writer io.Writer) *Stream {
  6. select {
  7. case stream := <-cfg.streamPool:
  8. stream.Reset(writer)
  9. return stream
  10. default:
  11. return NewStream(cfg, writer, 512)
  12. }
  13. }
  14. func (cfg *frozenConfig) ReturnStream(stream *Stream) {
  15. stream.Error = nil
  16. select {
  17. case cfg.streamPool <- stream:
  18. return
  19. default:
  20. return
  21. }
  22. }
  23. func (cfg *frozenConfig) BorrowIterator(data []byte) *Iterator {
  24. select {
  25. case iter := <-cfg.iteratorPool:
  26. iter.ResetBytes(data)
  27. return iter
  28. default:
  29. return ParseBytes(cfg, data)
  30. }
  31. }
  32. func (cfg *frozenConfig) ReturnIterator(iter *Iterator) {
  33. iter.Error = nil
  34. select {
  35. case cfg.iteratorPool <- iter:
  36. return
  37. default:
  38. return
  39. }
  40. }