<> <> <> <> <> <> <> <> <<>> <> <<>> <> HashTable: CEDAR DEFINITIONS = BEGIN Table: TYPE = REF TableRec; TableRec: PRIVATE TYPE = MONITORED RECORD [ hash: HashProc, equal: EqualProc, size, sizeLimit, inhibitCount: INT, data: REF Seq ]; Seq: TYPE = PRIVATE RECORD [nodes: SEQUENCE max: SeqIndex OF Node]; Node: TYPE = PRIVATE REF NodeRep; NodeRep: TYPE = PRIVATE RECORD [key: Key, value: Value, next: Node]; SeqIndex: TYPE = NAT; Key: TYPE = REF; Value: TYPE = REF; HashProc: TYPE = PROC [Key] RETURNS [CARDINAL]; EqualProc: TYPE = PROC [Key, Key] RETURNS [BOOL]; Create: PROC [mod: SeqIndex _ 17, equal: EqualProc _ NIL, hash: HashProc _ NIL] RETURNS [Table]; <> RopeEqual, RopeEqualModCase: EqualProc; <> HashRope, HashRopeModCase: HashProc; <> GetSize: PROC [table: Table] RETURNS [INT]; <> Fetch: PROC [table: Table, key: Key] RETURNS [found: BOOLEAN, value: Value]; <> <> <> Replace: PROC [table: Table, key: Key, value: Value] RETURNS [BOOLEAN]; <> <> Store: PROC [table: Table, key: Key, value: Value] RETURNS [BOOLEAN]; <> <> Insert: PROC [table: Table, key: Key, value: Value] RETURNS [BOOLEAN]; <> <> Delete: PROC [table: Table, key: Key] RETURNS [BOOLEAN]; <> <> Pairs: PROC [table: Table, action: EachPairAction] RETURNS [BOOLEAN]; <> <> <> <> EachPairAction: TYPE = PROC [key: Key, value: Value] RETURNS [quit: BOOLEAN _ FALSE]; Erase: PROC [table: Table]; <> END.