Module Shared.LocalSource
Functions to work with ('a, 'k) t @ local.
val wrap :
access:'k Capsule_prim__.Prim.Access.t @ shared ->
'a @ local ->
('a, 'k) t @ local @@ portablewrap ~access v returns a pointer to the local value v, which lives in the sub-capsule of 'k. 'k is always the current capsule.
val unwrap :
access:'k Capsule_prim__.Prim.Access.t @ shared ->
('a, 'k) t @ local ->
'a @ local @@ portableunwrap ~access t returns the value of t, which lives in the sub-capsule of 'k. 'k is always the current capsule.
create f runs f within the sub-capsule of 'k and returns a local pointer to the result.
val map :
password:'k Capsule_prim__.Prim.Password.Shared.t @ local ->
f:('a @ local -> 'b @ local) @ local once portable ->
('a, 'k) t @ local ->
('b, 'k) t @ local @@ portablemap ~pasword ~f t applies f to the value of p within the sub-capsule of 'k and returns a local pointer to the result.
both t1 t2 is a pointer to a pair of the values of t1 and t2.
fst t gives a pointer to the first value inside t
snd t gives a pointer to the second value inside t
idx t i is a pointer to the value at i in t.
val extract :
password:'k Capsule_prim__.Prim.Password.Shared.t @ local ->
f:
('a @ local -> 'b @ local unique once portable contended) @ local once portable ->
('a, 'k) t @ local ->
'b @ local unique once portable contended @@ portableextract ~pasword ~f t applies f to the value of t within the sub-capsule of 'k and returns the result. The result has access to 'k so must be portable and is marked contended.
val inject :
('a : value mod contended) 'k. 'a @ local portable ->
('a, 'k) t @ local @@ portableinject v is a pointer to an value v injected into the capsule 'k. It's a specialization of create to values that are always uncontended.
val project :
('a : value mod portable) 'k. ('a, 'k) t @ local ->
'a @ local contended @@ portableproject t returns the value of t. The result is within 'k, so must be portable and is marked contended. Since it's always portable, unlike with extract, we don't need exclusive access to 'k: all accesses to the value happen only after it's marked contended.
val bind :
password:'k Capsule_prim__.Prim.Password.Shared.t @ local ->
f:('a @ local -> ('b, 'j) t @ local) @ local once portable ->
('a, 'k) t @ local ->
('b, 'j) t @ local @@ portablebind ~password ~f t is project (map ~password ~f t).