diff --git a/map.go b/map.go index a8d0b59..9f96343 100644 --- a/map.go +++ b/map.go @@ -101,3 +101,24 @@ func (m *Map[K, V]) Do(f func(m map[K]V)) { defer m.mutex.Unlock() f(m.data) } + +// DoWithError calls f with the underlying primitive map and returns its error. +// Be aware that this locks m for write access +// so Do can be used for reading as well as modifiying m. +func (m *Map[K, V]) DoWithError(f func(m map[K]V) error) error { + m.mutex.Lock() + defer m.mutex.Unlock() + return f(m.data) +} + +// Clone returns a copy of the underlying map data +func (m *Map[K, V]) Clone() map[K]V { + m.mutex.RLock() + defer m.mutex.RUnlock() + + c := map[K]V{} + for key, value := range m.data { + c[key] = value + } + return c +}