<> <> <> <> <<>> DIRECTORY TJaMBasic USING [DictBody, Object, Tuple, TuplePtr]; TJaMDict: DEFINITIONS = { <> DD: TYPE = TJaMBasic.DictBody; -- dictionary descriptor Slot: TYPE = TJaMBasic.TuplePtr; -- location of tuple in dictionary slotNIL: Slot = NIL; -- Slot returned if no room Loc: TYPE = CARDINAL; -- location of tuple in cache locNIL: Loc = LAST[Loc]; -- Loc returned if no room <> freeHash: CARDINAL = LAST[CARDINAL]; -- never returned by Hash Hash: PROC[key: TJaMBasic.Object] RETURNS[CARDINAL] = INLINE { WITH key:key SELECT FROM name => RETURN[key.id.index]; ENDCASE => RETURN[HashObject[key]] }; HashObject: PROC[TJaMBasic.Object] RETURNS[CARDINAL]; HashString: PROC[string TJaMBasic.Object] RETURNS[CARDINAL]; HashText: PROC[LONG STRING] RETURNS[CARDINAL]; <> LookUpDict: PROC[dd: POINTER TO READONLY DD, hash: CARDINAL, key: TJaMBasic.Object] RETURNS[BOOLEAN,Slot]; InsertInDict: PROC[dd: POINTER TO DD, hash: CARDINAL, tuple: TJaMBasic.Tuple, slot: Slot]; }.