CardTab: CEDAR DEFINITIONS = BEGIN Ref: TYPE = REF CardTabRep; CardTabRep: TYPE = MONITORED RECORD [impl: REF CardTabImplRep]; CardTabImplRep: TYPE; Key: TYPE = CARD; Val: TYPE = REF; Create: PROC [mod: NAT ¬ 17] 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. @ CardTab.mesa Copyright Σ 1987, 1991 by Xerox Corporation. All rights reserved. For Portable Cedar Russ Atkinson (RRA) January 16, 1987 1:43:01 pm PST Carl Hauser, January 14, 1988 4:43:00 pm PST A CardTab is a hash table which associates CARD keys with REF values. CardTab is like RefTab and SymTab except for the Key type. ... creates new table with suggested hash size. ... 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šΠbl™K™3K™,—K˜Kšœ+Οkœ ŸœD™K™šΟnœŸœŸ œŸ˜"K˜KšœŸœŸœ ˜Kš œ ŸœŸ œŸœŸœ˜?KšœŸœ˜K˜KšœŸœŸœ˜KšœŸœŸœ˜K˜š œŸœŸœŸœ˜+Kšœ/™/K˜—K˜š œŸœ ŸœŸœ˜%Kšœ„™„K˜—š œŸœŸœ Ÿœ ˜?KšœIŸœ4ŸœŸ™‘K˜—š œŸœŸœŸœ˜:Kšœ-ŸœFŸœ™—K˜—š œŸœŸœŸœ˜8KšœQŸœŸœ™‡K˜—š œŸœŸœŸœ˜9KšœPŸœŸœ™K˜—š œŸœŸœŸœ˜/Kšœ>Ÿœ Ÿœ™vK˜—š œŸœ ˜Kšœ,™,K™—K˜š œŸœŸœŸœŸœŸœ˜NK™—š œŸœ"ŸœŸœ˜