diff options
Diffstat (limited to 'lib/kernel/Namespace.ml')
| -rw-r--r-- | lib/kernel/Namespace.ml | 59 |
1 files changed, 25 insertions, 34 deletions
diff --git a/lib/kernel/Namespace.ml b/lib/kernel/Namespace.ml index 728c307..340e813 100644 --- a/lib/kernel/Namespace.ml +++ b/lib/kernel/Namespace.ml @@ -1,39 +1,30 @@ -class namespace = object (self) - inherit Lifecycle.null - inherit Identity.of_id +class namespace = + object (self) + inherit Lifecycle.null + inherit Identity.of_id + method to_string = "namespace" + val entries : (string, Protocols.Handle.t) BatMap.t Atomic.t = Atomic.make BatMap.empty + method protocols = Protocols.[Directory.make self; Registry.make self] - method to_string = "namespace" + method update key reference value = + match + Utilities.Atomic.mswap entries (fun e -> + if BatMap.find_opt key e = reference then + match value with + | Some v -> Ok (BatMap.add key v e) + | None -> Ok (BatMap.remove key e) + else Error () ) + with + | Ok _ -> Ok true + | Error _ -> Ok false - val entries : (string, Protocols.Handle.t) BatMap.t Atomic.t = - Atomic.make BatMap.empty + method list = Atomic.get entries |> BatMap.keys |> BatFingerTree.of_enum |> Result.ok - method protocols = Protocols.[Directory.make self; Registry.make self] - - method update key reference value = - match - Utilities.Atomic.mswap entries - (fun e -> - if BatMap.find_opt key e = reference then - match value with - | Some v -> Ok (BatMap.add key v e) - | None -> Ok (BatMap.remove key e) - else - Error ()) - with - | Ok _ -> Ok true - | Error _ -> Ok false - - method list = - Atomic.get entries - |> BatMap.keys - |> BatFingerTree.of_enum - |> Result.ok - - method find key = - Atomic.get entries - |> BatMap.find_opt key - |> Utilities.Option.fmap Protocols.Handle.copy - |> Result.ok -end + method find key = + Atomic.get entries + |> BatMap.find_opt key + |> Utilities.Option.fmap Protocols.Handle.copy + |> Result.ok + end let make () = Protocols.Handle.make (new namespace) |
