sig
module Id : Types.Integral
type ('a, 'b, 'c) kind = Generator of 'a | Mutator of 'b | Observer of 'c
type ('a, 'b, 'c) edge = {
target : Id.t;
op : ('a, 'b, 'c) Reins.Dug.kind;
pos : int;
}
type ('a, 'b, 'c) t = {
mutable current_id : Id.t;
nodes : (Id.t, ('a, 'b, 'c) Reins.Dug.kind) Hashtbl.t;
edges : (Id.t, ('a, 'b, 'c) Reins.Dug.edge) Hashtbl.t;
}
val create : unit -> ('a, 'b, 'c) Reins.Dug.t
val clear : ('a, 'b, 'c) Reins.Dug.t -> unit
val size : ('a, 'b, 'c) Reins.Dug.t -> Id.t
val fresh_id : ('a, 'b, 'c) Reins.Dug.t -> Id.t
val is_mutator : ('a, 'b, 'c) Reins.Dug.kind -> bool
val is_generator : ('a, 'b, 'c) Reins.Dug.kind -> bool
val is_observer : ('a, 'b, 'c) Reins.Dug.kind -> bool
end