liquid-fixpoint-0.1.0.0: external/ocamlgraph/src/imperative.mli
(**************************************************************************)
(* *)
(* Ocamlgraph: a generic graph library for OCaml *)
(* Copyright (C) 2004-2007 *)
(* Sylvain Conchon, Jean-Christophe Filliatre and Julien Signoles *)
(* *)
(* This software is free software; you can redistribute it and/or *)
(* modify it under the terms of the GNU Library General Public *)
(* License version 2, with the special exception on linking *)
(* described in file LICENSE. *)
(* *)
(* This software is distributed in the hope that it will be useful, *)
(* but WITHOUT ANY WARRANTY; without even the implied warranty of *)
(* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. *)
(* *)
(**************************************************************************)
(* $Id: imperative.mli,v 1.18 2006-05-12 14:07:16 filliatr Exp $ *)
(** Imperative Implementations *)
open Sig
(** Signature of imperative graphs *)
module type S = sig
(** Imperative Unlabeled Graphs *)
module Concrete (V: COMPARABLE) :
Sig.I with type V.t = V.t and type V.label = V.t and type E.t = V.t * V.t
(** Abstract Imperative Unlabeled Graphs *)
module Abstract(V: ANY_TYPE) :
Sig.IM with type V.label = V.t and type E.label = unit
(** Imperative Labeled Graphs *)
module ConcreteLabeled (V: COMPARABLE)(E: ORDERED_TYPE_DFT) :
Sig.I with type V.t = V.t and type V.label = V.t
and type E.t = V.t * E.t * V.t and type E.label = E.t
(** Abstract Imperative Labeled Graphs *)
module AbstractLabeled (V: ANY_TYPE)(E: ORDERED_TYPE_DFT) :
Sig.IM with type V.label = V.t and type E.label = E.t
end
(** Imperative Directed Graphs *)
module Digraph : sig
include S
(** Imperative Unlabeled, bidirectional graph (gives predecessors in
constant time) *)
module ConcreteBidirectional (V: COMPARABLE) :
Sig.I with type V.t = V.t and type V.label = V.t and type E.t = V.t * V.t
end
(** Imperative Undirected Graphs *)
module Graph : S
(** Imperative graphs implemented as adjacency matrices *)
module Matrix : sig
module type S = sig
(** Vertices are integers in [0..n-1].
A vertex label is the vertex itself.
Edges are unlabeled. *)
include Sig.I with type V.t = int and type V.label = int
and type E.t = int * int
(** Creation. graphs are not resizeable: size is given at creation time.
Thus [make] must be used instead of [create] *)
val make : int -> t
(** Note: [add_vertex] and [remove_vertex] have no effect *)
end
module Digraph : S
(** Imperative Directed Graphs implemented with adjacency matrices *)
module Graph : S
(** Imperative Undirected Graphs implemented with adjacency matrices *)
end