aboutsummaryrefslogtreecommitdiffstats
path: root/lib/kernel/Namespace.ml
diff options
context:
space:
mode:
Diffstat (limited to 'lib/kernel/Namespace.ml')
-rw-r--r--lib/kernel/Namespace.ml59
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)