@@ -89,4 +89,44 @@ object AtomicMap {
89
89
override def apply (key : K ): AtomicCell [F , V ] =
90
90
AtomicCell .defaultedAtomicCell(atomicCell = atomicMap(key), default)
91
91
}
92
+
93
+ implicit def atomicMapOptionSyntax [F [_], K , V ](
94
+ atomicMap : AtomicMap [F , K , Option [V ]]
95
+ )(
96
+ implicit F : Applicative [F ]
97
+ ): AtomicMapOptionOps [F , K , V ] =
98
+ new AtomicMapOptionOps (atomicMap)
99
+
100
+ final class AtomicMapOptionOps [F [_], K , V ] private [effect] (
101
+ atomicMap : AtomicMap [F , K , Option [V ]]
102
+ )(
103
+ implicit F : Applicative [F ]
104
+ ) {
105
+ def getOrElse (key : K , default : V ): F [V ] =
106
+ atomicMap(key).getOrElse(default)
107
+
108
+ def unsetKey (key : K ): F [Unit ] =
109
+ atomicMap(key).unset
110
+
111
+ def setValue (key : K , value : V ): F [Unit ] =
112
+ atomicMap(key).setValue(value)
113
+
114
+ def modifyValueIfSet [B ](key : K )(f : V => (V , B )): F [Option [B ]] =
115
+ atomicMap(key).modifyValueIfSet(f)
116
+
117
+ def evalModifyValueIfSet [B ](key : K )(f : V => F [(V , B )]): F [Option [B ]] =
118
+ atomicMap(key).evalModifyValueIfSet(f)
119
+
120
+ def updateValueIfSet (key : K )(f : V => V ): F [Unit ] =
121
+ atomicMap(key).updateValueIfSet(f)
122
+
123
+ def evalUpdateValueIfSet (key : K )(f : V => F [V ]): F [Unit ] =
124
+ atomicMap(key).evalUpdateValueIfSet(f)
125
+
126
+ def getAndSetValue (key : K , value : V ): F [Option [V ]] =
127
+ atomicMap(key).getAndSetValue(value)
128
+
129
+ def withDefaultValue (default : V ): AtomicMap [F , K , V ] =
130
+ defaultedAtomicMap(atomicMap, default)
131
+ }
92
132
}
0 commit comments