Card4Tab: CEDAR DEFINITIONS = BEGIN Ref: TYPE = REF Card4TabRep; Card4TabRep: TYPE = MONITORED RECORD [impl: REF Card4TabImplRep]; Card4TabImplRep: TYPE; Key: TYPE = ARRAY [0 .. 3] OF CARD; Val: TYPE = REF; EqualProc: TYPE = PROC [key1, key2: Key] RETURNS [BOOL]; HashProc: TYPE = PROC [key: Key] RETURNS [CARDINAL]; Create: PROC [mod: NAT ¬ 17, equal: EqualProc ¬ NIL, hash: HashProc ¬ NIL] RETURNS [Ref]; GetSize: PROC [x: Ref] RETURNS [INT]; Fetch: PROC [x: Ref, key: Key] RETURNS [found: BOOL, val: Val]; Replace: PROC [x: Ref, key: Key, val: Val] RETURNS [BOOL]; Store: PROC [x: Ref, key: Key, val: Val] RETURNS [BOOL]; Insert: PROC [x: Ref, key: Key, val: Val] RETURNS [BOOL]; Delete: PROC [x: Ref, key: Key] RETURNS [BOOL]; Erase: PROC [x: Ref]; EachPairAction: TYPE = PROC [key: Key, val: Val] RETURNS [quit: BOOL ¬ FALSE]; Pairs: PROC [x: Ref, action: EachPairAction] RETURNS [BOOL]; UpdateOperation: TYPE = {none, store, delete}; UpdateAction: TYPE = PROC [found: BOOL, val: Val] RETURNS [op: UpdateOperation ¬ none, new: Val ¬ NIL]; Update: PROC [x: Ref, key: Key, action: UpdateAction]; Copy: PROC [x: Ref] RETURNS [Ref]; END. „ Card4Tab.mesa Copyright Σ 1990, 1992 by Xerox Corporation. All rights reserved. Last tweaked by Mike Spreitzer on July 13, 1990 8:03:51 am PDT A Card4Tab is a hash table which associates pair-of-CARD keys with REF values. Card4Tab is like RefTab and SymTab except for the Key type. ... creates new table with suggested hash size. When equal=NIL, the keys are compared with `key1=key2'. When hash=NIL, some reasonable hash function is used. ... returns number of key-value pairs in table (use this to properly deal with monitored data in preference to using the size field) ... looks up key in table, returns associated value (if any); if found = TRUE, val = value associated with given key; if found = FALSE, val = NIL ... replaces value for existing key; returns TRUE if previous value overwritten; if no previous value for key, returns FALSE without inserting new pair ... stores new key-value pair, overwriting previous value for given key; returns TRUE if new value, FALSE if previous value overwritten ... inserts new key-value pair, except if previous value for given key; returns TRUE if inserted, FALSE if previous value for key ... deletes key-value pair associated with given key; returns TRUE if deletion actually occurred, FALSE if no such key ... deletes all key-value pairs in the table ... enumerates pairs currently in symbol table in unspecified order; pairs inserted/deleted during enumeration may or may not be seen; applies action to each pair until action returns TRUE or no more pairs; returns TRUE if some action returns TRUE ... atomically performs an update action; looks up key and calls action, which returns the desired operation. If op=none, the table is not changed; if op=store, the new value is stored; if op=delete, key is removed from the table. ... atomically copies the table. Carl Hauser, January 14, 1988 2:27:48 pm PST Folded in CedarChest7.0's RefTabExtras interface Κ(•NewlineDelimiter –(cedarcode) style™codešœ ™ Kšœ Οeœ7™BK™>—K˜KšœCΟkœE™‹K™šΟnœžœž œž˜#K˜Kšœžœžœ ˜Kš œ žœž œžœžœ˜AKšœžœ˜K˜Kš œžœžœ žœžœ˜#Kšœžœžœ˜K˜Kš œ žœžœžœžœ˜8Kš œ žœžœ žœžœ˜4K˜š Ÿœžœžœžœžœžœ˜YKšœ/™/K™7K™5K˜—K˜šŸœžœ žœžœ˜%Kšœ„™„K˜—šŸœžœžœ žœ ˜?KšœIžœ4žœž™‘K˜—šŸœžœžœžœ˜:Kšœ-žœFžœ™—K˜—šŸœžœžœžœ˜8KšœQžœžœ™‡K˜—šŸœžœžœžœ˜9KšœPžœžœ™K˜—šŸœžœžœžœ˜/Kšœ>žœ žœ™vK˜—šŸœžœ ˜Kšœ,™,K™—K˜š œžœžœžœžœžœ˜NK™—šŸœžœ"žœžœ˜