DIRECTORY CD USING [Instance, Object, ObjectClass, Design]; CDIndirectObjects: CEDAR DEFINITIONS = BEGIN IsIndirect: PROC [ob: CD.Object] RETURNS [BOOL] = INLINE { RETURN [ ob.class=indirectClass ] }; Indirectee: PROC [indOb: CD.Object] RETURNS [CD.Object] = INLINE { RETURN [IF indOb.class=indirectClass THEN NARROW[indOb.specificRef, CD.Instance].ob ELSE indOb] }; CreateIndirect: PROC [design: CD.Design, pointOb: CD.Object, reduce: BOOL_TRUE] RETURNS [indOb: CD.Object]; ReduceIndirect: PROC [design: CD.Design, indOb: CD.Object] RETURNS [changed: BOOL]; ChangeIndirect: PUBLIC PROC [design: CD.Design, indOb: CD.Object, pointNew: CD.Object]; indirectClass: REF --READONLY-- CD.ObjectClass; END. ϊCDIndirectObjects.mesa (part of ChipNDale) Copyright c 1986 by Xerox Corporation. All rights reversed. Concept by Bertrand Serlet, November 8, 1985 11:34:29 am PST Created by Christian Jacobi, February 12, 1986 6:50:17 pm PST Last edited by Christian Jacobi, February 12, 1986 8:51:01 pm PST Indirect objects introduce one level of indirection, so that users can store properties on indirect objects unnoticed by their source. --peels of one layer of indirection --creates an indirect object pointing to pointOb --design: where pointOb already is and indOb will be included --get rid of multiple layers of indirection --indOb will point to an object which is not an indirect object itself anymore --changes indOb to be an indirection to pointNew ΚΉ˜codešœ1™1Kšœ Οmœ1™