1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
open Kcas
type 'a t = 'a Magic_option.t Loc.t
let create x_opt = Loc.make (Magic_option.of_option x_opt)
module Xt = struct
let is_empty ~xt mv = Magic_option.is_none (Xt.get ~xt mv)
let try_put ~xt mv value =
Magic_option.is_none
(Xt.compare_and_swap ~xt mv Magic_option.none (Magic_option.some value))
let put ~xt mv value =
Xt.unsafe_modify ~xt mv (Magic_option.put_or_retry value)
let take_opt ~xt mv =
Magic_option.to_option (Xt.exchange ~xt mv Magic_option.none)
let take ~xt mv =
Magic_option.get_unsafe (Xt.unsafe_update ~xt mv Magic_option.take_or_retry)
let peek ~xt mv = Magic_option.get_or_retry (Xt.get ~xt mv)
let peek_opt ~xt mv = Magic_option.to_option (Xt.get ~xt mv)
end
let is_empty mv = Magic_option.is_none (Loc.get mv)
let put mv value = Loc.modify mv (Magic_option.put_or_retry value)
let try_put mv value =
Loc.compare_and_set mv Magic_option.none (Magic_option.some value)
let take mv = Magic_option.get_unsafe (Loc.update mv Magic_option.take_or_retry)
let take_opt mv = Magic_option.to_option (Loc.exchange mv Magic_option.none)
let peek mv = Loc.get_as Magic_option.get_or_retry mv
let peek_opt mv = Magic_option.to_option (Loc.get mv)