(* 
 File: HashTable.sig

 Signature for the hash table structure which provides 
 abbreviations for identifiers used in PEPA models by the modeller. 

 Note: this table can only store 2756 (=53*52) distinct identifiers
*)

signature HashTable =
sig
  (* Abstract type for hashed strings *)
  eqtype hashedstring

  (* gcla - hack *)
  val translatefn : (string -> string) ref

  (* Convert between hashed and unhashed versions *)
  val hash : string -> hashedstring
  val unhash : hashedstring -> string

  (* Turn a string literally into a hashed string *)
  val literal : string -> hashedstring

  (* Show a hashed string literally as a string *)
  val show : hashedstring -> string

  (* Convert a named activity to a tau activity *)
  val hide : hashedstring -> hashedstring

  (* Determine the minimun of two hashed identifiers *)
  val min : (hashedstring * hashedstring) -> hashedstring

  (* Convert the tables to strings for printing *)
  val show_unhash_table : unit -> string
  val show_hash_table : unit -> string
end;
