|
|
- 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)
- }
|