(* $Id$
* ----------------------------------------------------------------------
*
*)
(* The type topo.t is a partially ordered relation. You can add an element
* by giving all descendents ...
*)
module type IdentifiedType =
sig
type t
type id_t
val id : t -> id_t
end
exception Inconsistent_ordering
module type S =
sig
type key
type el_t
type t
val create : unit -> t
val add : t -> el_t -> unit
val let_le : t -> key -> key -> unit
val find : t -> key -> el_t
val le_than : t -> key -> key -> bool
val key : el_t -> key
val iter_up : (el_t -> unit) -> t -> unit
val iter_down : (el_t -> unit) -> t -> unit
val iter_up_at : (el_t -> unit) -> t -> key list -> unit
val iter_down_at : (el_t -> unit) -> t -> key list -> unit
val clear : t -> unit
val replace : t -> key -> el_t -> unit
val delete : t -> key -> unit
val copy : t -> t
end
module Make(H: IdentifiedType):
(S with type el_t = H.t
and type key = H.id_t)