functor (PO : Pomap_intf.PARTIAL_ORDER) ->
sig
module Store : Store_intf.STORE
type key = PO.el
type +'a node
type +'a pomap
type 'a add_find_result =
Found of Store.Ix.t * 'a node
| Added of Store.Ix.t * 'a node * 'a pomap
val empty : 'a pomap
val singleton : key -> 'a -> 'a pomap
val is_empty : 'a pomap -> bool
val cardinal : 'a pomap -> int
val add : key -> 'a -> 'a pomap -> 'a pomap
val add_node : 'a node -> 'a pomap -> 'a pomap
val remove : key -> 'a pomap -> 'a pomap
val remove_node : 'a node -> 'a pomap -> 'a pomap
val remove_ix : Store.Ix.t -> 'a pomap -> 'a pomap
val take : key -> 'a pomap -> Store.Ix.t * 'a node * 'a pomap
val take_ix : Store.Ix.t -> 'a pomap -> 'a node * 'a pomap
val add_find : key -> 'a -> 'a pomap -> 'a add_find_result
val add_fun : key -> 'a -> ('a -> 'a) -> 'a pomap -> 'a pomap
val mem : key -> 'a pomap -> bool
val mem_ix : Store.Ix.t -> 'a pomap -> bool
val find : key -> 'a pomap -> Store.Ix.t * 'a node
val find_ix : Store.Ix.t -> 'a pomap -> 'a node
val choose : 'a pomap -> Store.Ix.t * 'a node
val filter : (Store.Ix.t -> 'a node -> bool) -> 'a pomap -> 'a pomap
val partition :
(Store.Ix.t -> 'a node -> bool) -> 'a pomap -> 'a pomap * 'a pomap
val iter : ('a node -> unit) -> 'a pomap -> unit
val iteri : (Store.Ix.t -> 'a node -> unit) -> 'a pomap -> unit
val map : ('a node -> 'b) -> 'a pomap -> 'b pomap
val mapi : (Store.Ix.t -> 'a node -> 'b) -> 'a pomap -> 'b pomap
val fold : ('a node -> 'b -> 'b) -> 'a pomap -> 'b -> 'b
val foldi : (Store.Ix.t -> 'a node -> 'b -> 'b) -> 'a pomap -> 'b -> 'b
val topo_fold : ('a node -> 'b -> 'b) -> 'a pomap -> 'b -> 'b
val topo_foldi :
(Store.Ix.t -> 'a node -> 'b -> 'b) -> 'a pomap -> 'b -> 'b
val topo_fold_ix : (Store.Ix.t -> 'b -> 'b) -> 'a pomap -> 'b -> 'b
val rev_topo_fold : ('a node -> 'b -> 'b) -> 'a pomap -> 'b -> 'b
val rev_topo_foldi :
(Store.Ix.t -> 'a node -> 'b -> 'b) -> 'a pomap -> 'b -> 'b
val rev_topo_fold_ix : (Store.Ix.t -> 'b -> 'b) -> 'a pomap -> 'b -> 'b
val chain_fold : ('a node list -> 'b -> 'b) -> 'a pomap -> 'b -> 'b
val chain_foldi :
((Store.Ix.t * 'a node) list -> 'b -> 'b) -> 'a pomap -> 'b -> 'b
val rev_chain_fold : ('a node list -> 'b -> 'b) -> 'a pomap -> 'b -> 'b
val rev_chain_foldi :
((Store.Ix.t * 'a node) list -> 'b -> 'b) -> 'a pomap -> 'b -> 'b
val union : 'a pomap -> 'a pomap -> 'a pomap
val inter : 'a pomap -> 'a pomap -> 'a pomap
val diff : 'a pomap -> 'a pomap -> 'a pomap
val create_node :
key -> 'a -> Store.Ix.Set.t -> Store.Ix.Set.t -> 'a node
val get_key : 'a node -> key
val get_el : 'a node -> 'a
val get_sucs : 'a node -> Store.Ix.Set.t
val get_prds : 'a node -> Store.Ix.Set.t
val set_key : 'a node -> key -> 'a node
val set_el : 'a node -> 'a -> 'a node
val set_sucs : 'a node -> Store.Ix.Set.t -> 'a node
val set_prds : 'a node -> Store.Ix.Set.t -> 'a node
val get_nodes : 'a pomap -> 'a node Store.t
val get_top : 'a pomap -> Store.Ix.Set.t
val get_bot : 'a pomap -> Store.Ix.Set.t
val remove_eq_prds : ('a -> 'a -> bool) -> 'a pomap -> 'a pomap
val fold_eq_classes :
('a -> 'a -> bool) ->
('a -> 'a pomap -> 'b -> 'b) -> 'a pomap -> 'b -> 'b
val fold_split_eq_classes :
('a -> 'a -> bool) ->
('a -> 'a pomap -> 'b -> 'b) -> 'a pomap -> 'b -> 'b
val preorder_eq_classes : ('a -> 'a -> bool) -> 'a pomap -> 'a pomap list
val topo_fold_reduced :
('a -> 'a -> bool) -> ('a node -> 'b -> 'b) -> 'a pomap -> 'b -> 'b
val unsafe_update : 'a pomap -> Store.Ix.t -> 'a node -> 'a pomap
val unsafe_set_nodes : 'a pomap -> 'a node Store.t -> 'a pomap
val unsafe_set_top : 'a pomap -> Store.Ix.Set.t -> 'a pomap
val unsafe_set_bot : 'a pomap -> Store.Ix.Set.t -> 'a pomap
end