Skip to content

Commit

Permalink
feat(ansi): add parser pool to get/put parsers in a thread-safe manner
Browse files Browse the repository at this point in the history
  • Loading branch information
aymanbagabas committed Sep 13, 2024
1 parent a3aed41 commit 307a077
Showing 1 changed file with 26 additions and 0 deletions.
26 changes: 26 additions & 0 deletions ansi/parser_sync.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
package ansi

import (
"sync"

"github.com/charmbracelet/x/ansi/parser"
)

var parserPool = sync.Pool{
New: func() any {
return NewParser(parser.MaxParamsSize, 1024*4) // 4MB data buffer
},
}

// GetParser returns a parser from a sync pool.
func GetParser() *Parser {
return parserPool.Get().(*Parser)
}

// PutParser returns a parser to a sync pool. The parser is reset
// automatically.
func PutParser(p *Parser) {
p.Reset()
p.DataLen = 0
parserPool.Put(p)
}

0 comments on commit 307a077

Please sign in to comment.