ocaml/utils/consistbl.mli

83 lines
3.5 KiB
OCaml

(**************************************************************************)
(* *)
(* OCaml *)
(* *)
(* Xavier Leroy, projet Cristal, INRIA Rocquencourt *)
(* *)
(* Copyright 2002 Institut National de Recherche en Informatique et *)
(* en Automatique. *)
(* *)
(* All rights reserved. This file is distributed under the terms of *)
(* the GNU Lesser General Public License version 2.1, with the *)
(* special exception on linking described in the file LICENSE. *)
(* *)
(**************************************************************************)
(** Consistency tables: for checking consistency of module CRCs
{b Warning:} this module is unstable and part of
{{!Compiler_libs}compiler-libs}.
*)
open Misc
module Make (Module_name : sig
type t
module Set : Set.S with type elt = t
module Map : Map.S with type key = t
module Tbl : Hashtbl.S with type key = t
val compare : t -> t -> int
end) : sig
type t
val create: unit -> t
val clear: t -> unit
val check: t -> Module_name.t -> Digest.t -> filepath -> unit
(* [check tbl name crc source]
checks consistency of ([name], [crc]) with infos previously
stored in [tbl]. If no CRC was previously associated with
[name], record ([name], [crc]) in [tbl].
[source] is the name of the file from which the information
comes from. This is used for error reporting. *)
val check_noadd: t -> Module_name.t -> Digest.t -> filepath -> unit
(* Same as [check], but raise [Not_available] if no CRC was previously
associated with [name]. *)
val set: t -> Module_name.t -> Digest.t -> filepath -> unit
(* [set tbl name crc source] forcefully associates [name] with
[crc] in [tbl], even if [name] already had a different CRC
associated with [name] in [tbl]. *)
val source: t -> Module_name.t -> filepath
(* [source tbl name] returns the file name associated with [name]
if the latter has an associated CRC in [tbl].
Raise [Not_found] otherwise. *)
val extract: Module_name.t list -> t -> (Module_name.t * Digest.t option) list
(* [extract tbl names] returns an associative list mapping each string
in [names] to the CRC associated with it in [tbl]. If no CRC is
associated with a name then it is mapped to [None]. *)
val extract_map : Module_name.Set.t -> t -> Digest.t option Module_name.Map.t
(* Like [extract] but with a more sophisticated type. *)
val filter: (Module_name.t -> bool) -> t -> unit
(* [filter pred tbl] removes from [tbl] table all (name, CRC) pairs
such that [pred name] is [false]. *)
exception Inconsistency of {
unit_name : Module_name.t;
inconsistent_source : string;
original_source : string;
}
(* Raised by [check] when a CRC mismatch is detected. *)
exception Not_available of Module_name.t
(* Raised by [check_noadd] when a name doesn't have an associated
CRC. *)
end