1
1
package com
2
2
3
- import "sync"
3
+ import (
4
+ "fmt"
5
+ "sync"
6
+ )
4
7
5
8
// Map defines a concurrent-safe map structure.
6
9
// Keep in mind that the underlying map structure will grow indefinitely.
@@ -9,7 +12,7 @@ type Map[K comparable, V any] struct {
9
12
mu sync.Mutex
10
13
}
11
14
12
- func (m * Map [K , _ ]) Has (key K ) bool { _ , ok := m .Find (key ); return ok }
15
+ func (m * Map [K , _ ]) Has (key K ) bool { _ , ok := m .Contains (key ); return ok }
13
16
func (m * Map [_ , _ ]) Len () int { m .mu .Lock (); defer m .mu .Unlock (); return len (m .m ) }
14
17
func (m * Map [K , V ]) Pop (key K ) V {
15
18
m .mu .Lock ()
@@ -26,9 +29,22 @@ func (m *Map[K, V]) Put(key K, v V) bool {
26
29
return ok
27
30
}
28
31
func (m * Map [K , _ ]) Remove (key K ) { m .mu .Lock (); delete (m .m , key ); m .mu .Unlock () }
32
+ func (m * Map [K , _ ]) RemoveL (key K ) int {
33
+ m .mu .Lock ()
34
+ delete (m .m , key )
35
+ k := len (m .m )
36
+ m .mu .Unlock ()
37
+ return k
38
+ }
39
+ func (m * Map [K , V ]) String () string {
40
+ m .mu .Lock ()
41
+ s := fmt .Sprintf ("%v" , m .m )
42
+ m .mu .Unlock ()
43
+ return s
44
+ }
29
45
30
- // Find returns the first value found and a boolean flag if its found or not.
31
- func (m * Map [K , V ]) Find (key K ) (v V , ok bool ) {
46
+ // Contains returns the first value found and a boolean flag if its found or not.
47
+ func (m * Map [K , V ]) Contains (key K ) (v V , ok bool ) {
32
48
m .mu .Lock ()
33
49
defer m .mu .Unlock ()
34
50
if vv , ok := m .m [key ]; ok {
@@ -37,6 +53,11 @@ func (m *Map[K, V]) Find(key K) (v V, ok bool) {
37
53
return v , false
38
54
}
39
55
56
+ func (m * Map [K , V ]) Find (key K ) V {
57
+ v , _ := m .Contains (key )
58
+ return v
59
+ }
60
+
40
61
// FindBy searches the first key-value with the provided predicate function.
41
62
func (m * Map [K , V ]) FindBy (fn func (v V ) bool ) (v V , ok bool ) {
42
63
m .mu .Lock ()
0 commit comments