forked from lug/matterbridge
		
	
		
			
				
	
	
		
			51 lines
		
	
	
		
			866 B
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			51 lines
		
	
	
		
			866 B
		
	
	
	
		
			Go
		
	
	
	
	
	
package gojay
 | 
						|
 | 
						|
import (
 | 
						|
	"io"
 | 
						|
	"sync"
 | 
						|
)
 | 
						|
 | 
						|
var encPool = sync.Pool{
 | 
						|
	New: func() interface{} {
 | 
						|
		return NewEncoder(nil)
 | 
						|
	},
 | 
						|
}
 | 
						|
 | 
						|
var streamEncPool = sync.Pool{
 | 
						|
	New: func() interface{} {
 | 
						|
		return Stream.NewEncoder(nil)
 | 
						|
	},
 | 
						|
}
 | 
						|
 | 
						|
func init() {
 | 
						|
	for i := 0; i < 32; i++ {
 | 
						|
		encPool.Put(NewEncoder(nil))
 | 
						|
	}
 | 
						|
	for i := 0; i < 32; i++ {
 | 
						|
		streamEncPool.Put(Stream.NewEncoder(nil))
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
// NewEncoder returns a new encoder or borrows one from the pool
 | 
						|
func NewEncoder(w io.Writer) *Encoder {
 | 
						|
	return &Encoder{w: w}
 | 
						|
}
 | 
						|
 | 
						|
// BorrowEncoder borrows an Encoder from the pool.
 | 
						|
func BorrowEncoder(w io.Writer) *Encoder {
 | 
						|
	enc := encPool.Get().(*Encoder)
 | 
						|
	enc.w = w
 | 
						|
	enc.buf = enc.buf[:0]
 | 
						|
	enc.isPooled = 0
 | 
						|
	enc.err = nil
 | 
						|
	enc.hasKeys = false
 | 
						|
	enc.keys = nil
 | 
						|
	return enc
 | 
						|
}
 | 
						|
 | 
						|
// Release sends back a Encoder to the pool.
 | 
						|
func (enc *Encoder) Release() {
 | 
						|
	enc.isPooled = 1
 | 
						|
	encPool.Put(enc)
 | 
						|
}
 |