DIRECTORY Core, CoreMapFunction, CoreOps, CoreProperties, CoreSequence, IO; CoreMapFunctionImpl: CEDAR PROGRAM IMPORTS CoreOps, CoreProperties, IO EXPORTS CoreMapFunction = BEGIN OPEN Core, CoreMapFunction; mapFnCellClass: PUBLIC CellClass _ NEW[CellClassRec _ [name: "MapFn", recast: Recast, properties: CoreProperties.Props[[CoreOps.printClassProcProp, NEW[CoreOps.PrintClassProc _ PropPrintClass]]]]]; Start: PROC = { CoreOps.RegisterCellClass[mapFnCellClass]; }; Recast: RecastProc = { }; Create: PUBLIC PROC [name: ROPE _ NIL, public: Wire, args: MapFnCellType] RETURNS [cellType: CellType] = { cellType _ NEW[CellTypeRec _ [ name: name, class: mapFnCellClass, public: public, data: args]]; }; PropPrintClass: CoreOps.PrintClassProc = {Print[NARROW[data], out]}; Print: PUBLIC PROC [cell: MapFnCellType, out: IO.STREAM] = { IO.PutF[out, "\n\nBase cell type: %g", IO.rope[cell.cells[0].name]]; }; Start[]; END. œCoreMapFunctionImpl.mesa Copyright c 1985 by Xerox Corporation. All rights reserved. Louis Monier September 18, 1985 5:15:26 pm PDT Bertrand Serlet November 8, 1985 6:45:18 pm PST FOR i:NAT IN [0..args.length) DO wire: Wire _ cellType.public.elements[args.sequence[i]]; newWire: Wire _ CoreOps.CreateSequenceWire[name: wire.name, base: wire, count: args.count]; cellType.public.elements[args.sequence[i]] _ newWire; ENDLOOP; IO.PutF[out, ", count: %g", IO.int[cell.count]]; IO.PutRope[out, "\nstitch wires:"]; IF cell.stitches#NIL THEN FOR stitch: NAT IN [0..cell.stitches.length) DO IO.PutF[out, " (%g, %g)", IO.rope[cell.base.public.elements[cell.stitches[stitch].source].name], IO.rope[cell.base.public.elements[cell.stitches[stitch].sink].name]]; ENDLOOP; IO.PutRope[out, "\nsequence wires:"]; FOR seq: NAT IN [0..cell.length) DO IO.PutF[out, " %g", IO.rope[cell.base.public.elements[cell[seq]].name]]; ENDLOOP; ΚF– "cedar" style˜codešœ™Kšœ Οmœ1™