(**************************************************************************)
(*  The CDuce compiler                                                    *)
(*  Alain Frisch <Alain.Frisch@inria.fr> and the CDuce team               *)
(*  Copyright CNRS,INRIA, 2003,2004 (see LICENSE for details)             *)
(**************************************************************************)

module type T = 
sig
  include Custom.T
    (* Hashtbl.hash'able and Pervasives.compare'able type;
       typically, t is an integer *)
  type value
    
  val clear: unit -> unit  
    (* Previously allocated symbols are no longer valid; no check
       is provided. Registered values can be released by the GC only after
       a call to clear. *)

  val mk: value -> t
  val dummy_min: t
  val dummy_max: t
    (* Two dummy symbols, not associated with any registered value;
       resp. smallest and largest than any other symbol *)

  val value: t -> value
end

module Make(H : Custom.T) : T with type value = H.t and type t = int

module NoHash(H : Custom.T) : T with type value = H.t and type t = int


module Weak(H : Custom.T) : sig
  include Custom.T
  type value = H.t
  val mk: value -> t
  val value: t -> value
end

      
