1
0
Fork 0
mirror of https://github.com/FrankerFaceZ/FrankerFaceZ.git synced 2025-06-27 21:05:53 +00:00
FrankerFaceZ/socketserver/server/intern.go

43 lines
652 B
Go
Raw Permalink Normal View History

2016-01-17 17:45:37 -08:00
package server
import (
"sync"
)
type StringPool struct {
sync.RWMutex
lookup map[string]string
2016-01-17 17:45:37 -08:00
}
func NewStringPool() *StringPool {
return &StringPool{lookup: make(map[string]string)}
2016-01-17 17:45:37 -08:00
}
// doesn't lock, doesn't check for dupes.
func (p *StringPool) _Intern_Setup(s string) {
p.lookup[s] = s
2016-01-17 17:45:37 -08:00
}
func (p *StringPool) InternCommand(s string) Command {
return Command(p.Intern(s))
}
func (p *StringPool) Intern(s string) string {
2016-01-17 17:45:37 -08:00
p.RLock()
ss, exists := p.lookup[s]
p.RUnlock()
if exists {
return ss
}
p.Lock()
defer p.Unlock()
ss, exists = p.lookup[s]
if exists {
return ss
}
ss = copyString(s)
p.lookup[ss] = ss
2016-01-17 18:01:21 -08:00
return ss
2016-01-17 17:45:37 -08:00
}