TJaMDict.mesa
Copyright © 1985 by Xerox Corporation. All rights reserved.
Last edit by Doug Wyatt, 1-Oct-81 14:51:34
Michael Plass, February 14, 1985 12:26:04 pm PST
DIRECTORY
TJaMBasic USING [DictBody, Object, Tuple, TuplePtr];
TJaMDict: DEFINITIONS = {
Types and Constants
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
Hashing
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];
Low level dictionary operations
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];
}.