Functor SHGraph.Make


module Make: 
functor (T : T) -> S with type vertex=T.vertex and type hedge=T.hedge and module SetV=T.SetV and module SetH=T.SetH
Parameters:
T : T

type vertex 
type hedge 
module SetV: Sette.S  with type elt=vertex
module SetH: Sette.S  with type elt=hedge
type ('a, 'b, 'c) t 
Type of hypergraphs, where
val create : int -> 'a -> ('b, 'c, 'a) t
val clear : ('a, 'b, 'c) t -> unit
val is_empty : ('a, 'b, 'c) t -> bool

Statistics


val size_vertex : ('a, 'b, 'c) t -> int
val size_hedge : ('a, 'b, 'c) t -> int
val size_edgevh : ('a, 'b, 'c) t -> int
val size_edgehv : ('a, 'b, 'c) t -> int
val size : ('a, 'b, 'c) t -> int * int * int * int

Information associated to vertives and edges


val attrvertex : ('a, 'b, 'c) t -> vertex -> 'a
val attrhedge : ('a, 'b, 'c) t -> hedge -> 'b
val info : ('a, 'b, 'c) t -> 'c

Membership tests


val is_vertex : ('a, 'b, 'c) t -> vertex -> bool
val is_hedge : ('a, 'b, 'c) t -> hedge -> bool

Successors and predecessors


val succhedge : ('a, 'b, 'c) t -> vertex -> SetH.t
val predhedge : ('a, 'b, 'c) t -> vertex -> SetH.t
val succvertex : ('a, 'b, 'c) t -> hedge -> vertex array
val predvertex : ('a, 'b, 'c) t -> hedge -> vertex array
val succ_vertex : ('a, 'b, 'c) t -> vertex -> SetV.t
val pred_vertex : ('a, 'b, 'c) t -> vertex -> SetV.t

Adding and removing elements


val add_vertex : ('a, 'b, 'c) t -> vertex -> 'a -> unit
val add_hedge : ('a, 'b, 'c) t ->
hedge ->
'b -> pred:vertex array -> succ:vertex array -> unit
val remove_vertex : ('a, 'b, 'c) t -> vertex -> unit
val remove_hedge : ('a, 'b, 'c) t -> hedge -> unit

Iterators


val iter_vertex : ('a, 'b, 'c) t ->
(vertex ->
'a -> pred:SetH.t -> succ:SetH.t -> unit) ->
unit
val iter_hedge : ('a, 'b, 'c) t ->
(hedge ->
'b -> pred:vertex array -> succ:vertex array -> unit) ->
unit
val fold_vertex : ('a, 'b, 'c) t ->
(vertex ->
'a -> pred:SetH.t -> succ:SetH.t -> 'd -> 'd) ->
'd -> 'd
val fold_hedge : ('a, 'b, 'c) t ->
(hedge ->
'b -> pred:vertex array -> succ:vertex array -> 'd -> 'd) ->
'd -> 'd
val map : ('a, 'b, 'c) t ->
(vertex ->
'a -> pred:SetH.t -> succ:SetH.t -> 'd) ->
(hedge ->
'b -> pred:vertex array -> succ:vertex array -> 'e) ->
('c -> 'f) -> ('d, 'e, 'f) t

Copy and Transpose


val copy : (vertex -> 'a -> 'b) ->
(hedge -> 'c -> 'd) ->
('e -> 'f) -> ('a, 'c, 'e) t -> ('b, 'd, 'f) t
val transpose : (vertex -> 'a -> 'b) ->
(hedge -> 'c -> 'd) ->
('e -> 'f) -> ('a, 'c, 'e) t -> ('b, 'd, 'f) t

Algorithms


val min : ('a, 'b, 'c) t -> SetV.t
val max : ('a, 'b, 'c) t -> SetV.t
val topological_sort : ('a, 'b, 'c) t -> vertex -> vertex list
val topological_sort_multi : ('a, 'b, 'c) t -> SetV.t -> vertex list
val topological_sort_filter_multi : ('a, 'b, 'c) t ->
(hedge -> bool) -> SetV.t -> vertex list
val reachable : ('a, 'b, 'c) t ->
vertex -> SetV.t * SetH.t
val reachable_multi : ('a, 'b, 'c) t ->
SetV.t -> SetV.t * SetH.t
val reachable_filter_multi : ('a, 'b, 'c) t ->
(hedge -> bool) ->
SetV.t -> SetV.t * SetH.t
val cfc : ('a, 'b, 'c) t -> vertex -> vertex list list
val cfc_multi : ('a, 'b, 'c) t -> SetV.t -> vertex list list
val cfc_filter_multi : ('a, 'b, 'c) t ->
(hedge -> bool) -> SetV.t -> vertex list list
val cfc_priority_multi : ('a, 'b, 'c) t ->
(hedge -> int) -> SetV.t -> vertex list list
val scfc : ('a, 'b, 'c) t -> vertex -> vertex Ilist.t
val scfc_multi : ('a, 'b, 'c) t -> SetV.t -> vertex Ilist.t
val scfc_filter_multi : ('a, 'b, 'c) t ->
(hedge -> bool) -> SetV.t -> vertex Ilist.t
val scfc_priority_multi : ('a, 'b, 'c) t ->
(hedge -> int) -> SetV.t -> vertex Ilist.t

Printing


val print : (Format.formatter -> vertex -> unit) ->
(Format.formatter -> hedge -> unit) ->
(Format.formatter -> 'a -> unit) ->
(Format.formatter -> 'b -> unit) ->
(Format.formatter -> 'c -> unit) ->
Format.formatter -> ('a, 'b, 'c) t -> unit
val print_dot : ?titlestyle:string ->
?vertexstyle:string ->
?hedgestyle:string ->
?title:string ->
(Format.formatter -> vertex -> unit) ->
(Format.formatter -> hedge -> unit) ->
(Format.formatter -> vertex -> 'a -> unit) ->
(Format.formatter -> hedge -> 'b -> unit) ->
Format.formatter -> ('a, 'b, 'c) t -> unit