DIRECTORY List, OrderedSymbolTableRef; OrderedSymbolTableRefImpl: CEDAR PROGRAM IMPORTS List EXPORTS OrderedSymbolTableRef = BEGIN OPEN OrderedSymbolTableRef; Table: TYPE = REF Rep; Rep: PUBLIC TYPE = RECORD [compare: CompareProc, items: LIST OF REF ANY]; CreateTable: PUBLIC PROC [compare: CompareProc] RETURNS [Table] ={ RETURN [NEW[Rep _ [compare: compare, items: NIL]]] }; --CreateTable Insert: PUBLIC PROC[tab: Table, item: REF ANY] ={ compare: CompareProc _ tab.compare; IF List.Memb[item, tab.items] THEN RETURN; IF tab.items = NIL OR compare[item, tab.items.first] = less THEN tab.items _ CONS[item, tab.items] ELSE { FOR l: LIST OF REF ANY _ tab.items, l.rest UNTIL l = NIL DO IF l.rest = NIL OR compare[item, l.rest.first] = less THEN {l.rest _ CONS[item, l.rest]; EXIT} ENDLOOP;} };-- Insert DestroyTable: PUBLIC PROC[tab: Table] = { tab.compare _ NIL; tab.items _ NIL; }; --DestroyTable DeleteAllItems: PUBLIC PROC[tab: Table] = { tab.items _ NIL;};--DeleteAllItems LookupSmallest: PUBLIC PROC [tab: Table] RETURNS [REF ANY] = { RETURN[tab.items.first] }; --LookupSmallest LookupNextLarger: PUBLIC PROC [tab: Table, item: REF ANY] RETURNS [REF ANY] = { nextLarger: REF ANY _ NIL; FOR l: LIST OF REF ANY _ tab.items, l.rest UNTIL l = NIL DO IF item = l.first AND l.rest # NIL THEN {nextLarger _ l.rest.first; EXIT}; ENDLOOP; RETURN [nextLarger] }; --LookupNextLarger EnumerateIncreasing: PUBLIC PROC[tab: Table, action: EachItemAction] = { FOR l: LIST OF REF ANY _ tab.items, l.rest UNTIL l = NIL DO IF action[l.first] THEN EXIT; ENDLOOP; }; --EnumerateIncreasing Size: PUBLIC PROC [tab: Table] RETURNS [INT] ={ RETURN [List.Length[tab.items]] }; --Size END. Š--File: OrderedSymbolTableRefImpl.mesa Last Edited by: CSChow, January 28, 1985 2:34:40 am PST Preas, August 2, 1986 8:15:10 pm PDT Κή˜Jšœ&™&™7Icode™$—J˜šΟk ˜ Jšœ˜Jšœ˜—J˜šœœ˜(Jšœ˜ Jšœœœ˜BKšœœœ˜Kš œœœœœœœ˜IJ˜šΟn œœœœ ˜BKšœœ'˜2KšœΟcž ˜—K˜K˜šžœœœœ˜1Kšœ#˜#Kšœœ˜*šœ œœ&˜;Kšœ#˜'šœ˜šœœœœœœœ˜;Kšœ, œ$˜_Kšœ˜ —K˜—K˜—KšœŸž˜ —K˜šž œ œ˜)K˜K˜Kšœž ˜—K˜šžœ œ˜+Kšœž˜"K˜—šžœ œœœ˜>šœ˜Kšœž˜K˜——K˜š žœ œœœœ˜OKšœ œœœ˜šœœœœœœœ˜