package utils import ( "sync" "sync/atomic" ) type WaitGroup interface { Add(delta int) Done() Wait() } type CountWaitGroup struct { wg sync.WaitGroup num atomic.Int64 } func (c *CountWaitGroup) Add(delta int) { c.wg.Add(delta) c.num.Add(int64(delta)) } func (c *CountWaitGroup) Done() { c.wg.Done() c.num.Add(-1) } func (c *CountWaitGroup) Wait() { c.wg.Wait() } func (c *CountWaitGroup) Count() uint64 { return uint64(c.num.Load()) }