(**********************************************************************

:Program.    OpenHash.def
:Contens.    Ein Biliotheksmodul für Hashtabellen. 
:Contens.    Nur für das Programm Rechtschreib zu gebrauchen.
:Author.     Bernd Braun
:Address.    Lippestr. 11, D-3300 Braunschweig
:Phone.      0531/845498
:Copyright.  Public Domain
:Language.   Modula-2
:Translator. M2Amiga A+L V3.32d
:Imports.    DynStr, Liste, NewInOut
:History.    V1.0 3.Okt.1990

***********************************************************************)

DEFINITION MODULE OpenHash;

   FROM DynStr IMPORT
      DynString;
   FROM Liste IMPORT
      List;
   FROM NewInOut IMPORT
      FILE;

   TYPE
      HashFunc = PROCEDURE ( DynString ) : LONGINT;
                 (* Zum Zuordnen eines Hashwertes zu einem Eintrag. *)
      TablePtr  = POINTER TO List;       (* Tabelle mit Überlauflisten *)
      TableType = ARRAY [ 0 .. MAX(INTEGER) ] OF List;

      TableHead = RECORD                  (* Tabellenkopf *)
                     Hash     : HashFunc; (* Hashfunktion *)
                     MaxTable : INTEGER;  (* Aktuelle Größe *)
                     Tab      : POINTER TO TableType;
                  END;

      Table      = POINTER TO TableHead;  (* Zeiger auf den Tabellenkopf *)


   (* Initialisiert eine Hashtabelle mit Max Überlauflisten. *)
   PROCEDURE InitHash ( VAR T   : Table;
                            Max : INTEGER );

   (* Löscht alle Überlauflisten einer Hashtabelle und sie selber. *)
   PROCEDURE ExitHash ( VAR T : Table );

   (* Trägt einen Dynstring in eine Hashtabelle ein. *)
   PROCEDURE InsertHash ( VAR T    : Table;
                              Item : DynString );

   (* Sucht einen DynString in einer Hashtabelle. Gibt bei Erfolg TRUE
      zurück, FALSE sonst. *)
   PROCEDURE MemberHash ( T    : Table;
                          Item : DynString ) : BOOLEAN;


   (* Schreibt alle DynStrings einer Hashtabelle in ein File. *)
   PROCEDURE PrintTable (   T  : Table;
                          file : FILE );

END OpenHash.
