package riot
Source file ref.ml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19type 'a t = Ref : int64 -> 'a t [@@unboxed] let __current__ = Atomic.make 0L let pp ppf (Ref pid) = Format.fprintf ppf "#Ref<%s>" (Int64.to_string pid) let rec make () = let last = Atomic.get __current__ in let current = last |> Int64.succ in if Atomic.compare_and_set __current__ last current then Ref last else make () let equal (Ref a) (Ref b) = Int64.equal a b let type_equal : type a b. a t -> b t -> (a, b) Type.eq option = fun a b -> match (a, b) with | Ref a', Ref b' when Int64.equal a' b' -> Some (Obj.magic Type.Equal) | _ -> None let is_newer (Ref a) (Ref b) = Int64.compare a b = 1