package cache

import (
	"context"
	"sync"
	"sync/atomic"
)

type CancelCollection struct {
	id    int64
	items sync.Map
}

func (c *CancelCollection) Add(ctx context.Context, obj interface{}) {
	key := atomic.AddInt64(&c.id, 1)
	c.items.Store(key, obj)
	go func() {
		<-ctx.Done()
		c.items.Delete(key)
	}()
}

func (c *CancelCollection) List() (result []interface{}) {
	c.items.Range(func(key, value interface{}) bool {
		result = append(result, value)
		return true
	})
	return
}