34 lines
633 B
34 lines
633 B
package gls
|
|
|
|
// though this could probably be better at keeping ids smaller, the goal of
|
|
// this class is to keep a registry of the smallest unique integer ids
|
|
// per-process possible
|
|
|
|
import (
|
|
"sync"
|
|
)
|
|
|
|
type idPool struct {
|
|
mtx sync.Mutex
|
|
released []uint
|
|
max_id uint
|
|
}
|
|
|
|
func (p *idPool) Acquire() (id uint) {
|
|
p.mtx.Lock()
|
|
defer p.mtx.Unlock()
|
|
if len(p.released) > 0 {
|
|
id = p.released[len(p.released)-1]
|
|
p.released = p.released[:len(p.released)-1]
|
|
return id
|
|
}
|
|
id = p.max_id
|
|
p.max_id++
|
|
return id
|
|
}
|
|
|
|
func (p *idPool) Release(id uint) {
|
|
p.mtx.Lock()
|
|
defer p.mtx.Unlock()
|
|
p.released = append(p.released, id)
|
|
}
|
|
|