wait sync.RWMutex
}
+func (t *MapExceeded[K, V]) Copy() (m *MapExceeded[K, V]) {
+ m = &MapExceeded[K, V]{}
+ t.m.Range(func(key, value any) bool {
+ if value.(*mapExceededItem[V]).exceeded.After(time.Now()) {
+ m.m.Store(key, value)
+ }
+ return true
+ })
+ return
+}
+
func (t *MapExceeded[K, V]) Store(k K, v *V, dur time.Duration) {
t.m.Store(k, &mapExceededItem[V]{
data: v,
}
w.Wait()
}
+
+func TestMapExceeded3(t *testing.T) {
+ var m MapExceeded[string, []byte]
+ var data = []byte("1")
+ if v, loaded, f := m.LoadOrStore("1"); v != nil || loaded {
+ t.Fatal()
+ } else {
+ f(&data, time.Second)
+ if v, ok := m.Load("1"); !ok || v == nil || !bytes.Equal(data, *v) {
+ t.Fatal()
+ }
+ }
+
+ p := m.Copy()
+
+ if v, ok := p.Load("1"); !ok || v == nil || !bytes.Equal(data, *v) {
+ t.Fatal()
+ }
+}