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