PROCEDURE HashVal(hash: Hash;
object: Objects.Object) : HashValue;
(* converts provided hash value into a hash value inside
our range of [0..tabsize-1]
*)
BEGIN
RETURN
SHORT(SYSTEM.LSH(1327217883 * hash.hashval(object),
logtabsize - 32))
END HashVal;
PROCEDURE Find(hash: Hash; key: Objects.Object;
VAR hashval: HashValue;
VAR entry, predecessor: Entry) : BOOLEAN;
BEGIN
hashval := HashVal(hash, key);
entry := hash.bucket[hashval]; predecessor := NIL;
WHILE (entry # NIL) & ~hash.equal(entry.object, key) DO
predecessor := entry; entry := entry.next;
END;
RETURN entry # NIL
END Find;
|