Module Reins.Dug


module Dug: sig .. end


Datatype Usage Graphs
module Id: Reins.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) kind;
   pos : int;
}
type ('a, 'b, 'c) t = {
   mutable current_id : Id.t;
   nodes : (Id.t, ('a, 'b, 'c) kind) Hashtbl.t;
   edges : (Id.t, ('a, 'b, 'c) edge) Hashtbl.t;
}
val create : unit -> ('a, 'b, 'c) t
val clear : ('a, 'b, 'c) t -> unit
val size : ('a, 'b, 'c) t -> Id.t
val fresh_id : ('a, 'b, 'c) t -> Id.t
val is_mutator : ('a, 'b, 'c) kind -> bool
val is_generator : ('a, 'b, 'c) kind -> bool
val is_observer : ('a, 'b, 'c) kind -> bool