DIRECTORY PairList; PairListImpl: CEDAR PROGRAM EXPORTS PairList = BEGIN OPEN PairList; NotFound: PUBLIC SIGNAL = CODE; CreateRelation: PUBLIC PROCEDURE RETURNS [relation: Relation] = BEGIN relation _ NEW[RelationHead]; END; AddPair: PUBLIC PROCEDURE [relation: Relation, left, right: REF ANY] = BEGIN pair: REF Pair _ NEW[Pair]; pair.left _ left; pair.right _ right; pair.link _ relation.first; relation.first _ pair; END; Left: PUBLIC PROCEDURE[relation: Relation, equals: EqualProc, right: REF ANY] RETURNS [left: REF ANY] = BEGIN notFound: BOOLEAN _ TRUE; IsRight: PROCEDURE [leftPart, rightPart: REF ANY] = BEGIN IF equals[right,rightPart] THEN {left_leftPart; notFound_ FALSE}; END; ForAllPairs[relation, IsRight]; IF notFound THEN SIGNAL NotFound; END; Right: PUBLIC PROCEDURE[relation: Relation, equals: EqualProc, left: REF ANY] RETURNS [right: REF ANY] = BEGIN notFound: BOOLEAN _ TRUE; IsLeft: PROCEDURE [leftPart, rightPart: REF ANY] = BEGIN IF equals[left,leftPart] THEN {right_rightPart; notFound_ FALSE}; END; ForAllPairs[relation, IsLeft]; IF notFound THEN SIGNAL NotFound; END; ForAllPairs: PUBLIC PROCEDURE[relation: Relation, do: PROCEDURE[leftPart, rightPart: REF ANY]] = BEGIN pair: REF Pair _ NIL; IF relation=NIL THEN RETURN; FOR pair _ relation.first, pair.link UNTIL pair=NIL DO do[pair.left, pair.right] ENDLOOP; END; DestroyRelation: PUBLIC PROCEDURE[relation: Relation] = BEGIN pair, next: REF Pair _ NIL; IF relation=NIL THEN RETURN; FOR pair _ relation.first, next UNTIL pair=NIL DO next _ pair.link; ENDLOOP; END; END. ªPairListImpl.Mesa Stone 26-Jun-81 15:28:54 Cedar version:18-Jun-81 14:24:37 Ordered pairs; building and searching Last Edited by: Beach, May 1, 1984 2:09:02 pm PDT Ê)˜™Jšœ™Jšœ ™ Jšœ%™%J™1—J˜šÏk ˜ J˜ J˜—šœ ˜Jšœ ˜—Jšœœ ˜J˜Jšœ œœœ˜J˜JšÏnœœ œœ˜?Jš˜Jšœ œ˜Jšœ˜J˜šžœœ œ˜.Jšœ œœ˜—Jš˜Jšœœœ˜J˜%J˜J˜Jšœ˜J˜š žœœ œ/œœ˜MJšœœœ˜—Jš˜Jšœ œœ˜šžœ œœœ˜3Jš˜Jšœœœ˜AJšœ˜—J˜Jšœ œœ ˜!Jšœ˜J˜š žœœ œ.œœ˜MJšœ œœ˜—Jš˜Jšœ œœ˜šžœ œœœ˜2Jš˜Jšœœœ˜AJšœ˜—J˜Jšœ œœ ˜!Jšœ˜J˜šž œœ œ˜1Jšœ œœœ˜.—Jš˜Jšœœœ˜Jšœ œœœ˜šœ"œ˜3Jšœœ˜%—Jšœ˜J˜Jšžœœ œ˜7Jš˜Jšœ œœ˜Jšœ œœœ˜šœœ˜.Jš˜J˜Jšœ˜—Jšœ˜J˜Jšœ˜J˜J˜J˜J˜—…— ñ