-- JaMDict.mesa
-- Last edit by Doug Wyatt,  1-Oct-81 14:51:34

DIRECTORY
  JaMBasic USING [DictBody, Object, Tuple, TupleRptr, vmNIL];

JaMDict: DEFINITIONS = {
OPEN JaMBasic;

-- Types and Constants

DD: TYPE = DictBody; -- dictionary descriptor
Slot: TYPE = TupleRptr; -- location of tuple in dictionary
slotNIL: Slot = vmNIL; -- Slot returned if no room
Loc: TYPE = CARDINAL; -- location of tuple in cache
locNIL: Loc = LAST[Loc]; -- Loc returned if no room

-- Hashing

freeHash: CARDINAL = LAST[CARDINAL]; -- never returned by Hash

Hash: PROC[key: Object] RETURNS[CARDINAL] = INLINE {
  WITH key:key SELECT FROM name => RETURN[key.id.index];
    ENDCASE => RETURN[HashObject[key]] };
    
HashObject: PROC[Object] RETURNS[CARDINAL];
HashString: PROC[string Object] RETURNS[CARDINAL];
HashText: PROC[LONG STRING] RETURNS[CARDINAL];

-- Low level dictionary operations

LookUpDict: PROC[dd: POINTER TO READONLY DD,
  hash: CARDINAL, key: Object] RETURNS[BOOLEAN,Slot];

InsertInDict: PROC[dd: POINTER TO DD,
  hash: CARDINAL, tuple: Tuple, slot: Slot];

}.