CoreMapFunctionImpl.mesa
Copyright © 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
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: ROPENIL, public: Wire, args: MapFnCellType] RETURNS [cellType: CellType] = {
cellType ← NEW[CellTypeRec ← [
name: name,
class: mapFnCellClass,
public: public,
data: args]];
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;
};
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]];
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;
};
Start[];
END.