CoreRecordCells.mesa 
Copyright © 1985 by Xerox Corporation. All rights reversed.
Last Edited by: Barth, August 13, 1985 7:41:03 pm PDT
Bertrand Serlet August 14, 1985 10:53:44 am PDT
DIRECTORY Core;
CoreRecordCells: CEDAR DEFINITIONS = BEGIN OPEN Core;
Theory
This interface describes the structuring mechanism which takes a collection of cell types of various classes and binds them together.
Some invariants must be established by a program which creates this data structure:
1) For each instance the actualWire field must be isomorphic to the publicWire field of the cell type which is pointed to by the instance.
2) The wires of each actualWire field must point to wires that are reachable from the internalWire field of the RecordCell.
3) The publicWire of the CellType must point to wires reachable from the internalWire of the RecordCell.
Practice
recordCellClass: CellClass;
RecordCell: TYPE = REF RecordCellRec;
RecordCellRec: TYPE = RECORD [
internalWire: Wire,
instances: InstanceList ← NIL];
Instance: TYPE = REF InstanceRec;
InstanceList: TYPE = LIST OF Instance;
InstanceRec: TYPE = RECORD [
name: ROPENIL,
actualWire: Wire,
type: CellType,
properties: Properties ← NIL];
Print: PROC [cell: RecordCell, out: STREAM];
END.