mirror of
https://github.com/VictoriaMetrics/VictoriaMetrics.git
synced 2024-12-23 00:46:23 +01:00
53 lines
981 B
Go
53 lines
981 B
Go
|
package fastjson
|
||
|
|
||
|
import (
|
||
|
"sync"
|
||
|
)
|
||
|
|
||
|
// ParserPool may be used for pooling Parsers for similarly typed JSONs.
|
||
|
type ParserPool struct {
|
||
|
pool sync.Pool
|
||
|
}
|
||
|
|
||
|
// Get returns a Parser from pp.
|
||
|
//
|
||
|
// The Parser must be Put to pp after use.
|
||
|
func (pp *ParserPool) Get() *Parser {
|
||
|
v := pp.pool.Get()
|
||
|
if v == nil {
|
||
|
return &Parser{}
|
||
|
}
|
||
|
return v.(*Parser)
|
||
|
}
|
||
|
|
||
|
// Put returns p to pp.
|
||
|
//
|
||
|
// p and objects recursively returned from p cannot be used after p
|
||
|
// is put into pp.
|
||
|
func (pp *ParserPool) Put(p *Parser) {
|
||
|
pp.pool.Put(p)
|
||
|
}
|
||
|
|
||
|
// ArenaPool may be used for pooling Arenas for similarly typed JSONs.
|
||
|
type ArenaPool struct {
|
||
|
pool sync.Pool
|
||
|
}
|
||
|
|
||
|
// Get returns an Arena from ap.
|
||
|
//
|
||
|
// The Arena must be Put to ap after use.
|
||
|
func (ap *ArenaPool) Get() *Arena {
|
||
|
v := ap.pool.Get()
|
||
|
if v == nil {
|
||
|
return &Arena{}
|
||
|
}
|
||
|
return v.(*Arena)
|
||
|
}
|
||
|
|
||
|
// Put returns a to ap.
|
||
|
//
|
||
|
// a and objects created by a cannot be used after a is put into ap.
|
||
|
func (ap *ArenaPool) Put(a *Arena) {
|
||
|
ap.pool.Put(a)
|
||
|
}
|