<> <> <> <> <<>> DIRECTORY Core, CoreCreate, CoreGeometry; TilingClass: CEDAR DEFINITIONS ~ BEGIN <> <> <> CellType : TYPE = Core.CellType; Properties : TYPE = Core.Properties; ROPE: TYPE = Core.ROPE; Wire: TYPE = Core.Wire; WireSeq: TYPE = Core.WireSeq; Wires: TYPE = Core.Wires; PA: TYPE = CoreCreate.PA; WR: TYPE = CoreCreate.WR; <> Tile: TYPE ~ REF TileRec; TileRec: TYPE ~ RECORD [ type: CellType, -- type of the tile. renaming: LIST OF PA _ NIL, -- binding [public of the tile -> public of the whole array]. There is no implicit renaming (contrarily to CoreCreate). flatten: BOOL _ FALSE, -- if flatten, the tile's type should be a record cell, and is flattened once at Recast time. All the internals of the tile's type should be public. No impact on layout. Non-wizards: default is fine! properties: Core.Properties _ NIL -- to store arbitrary information. implementation uses it. ]; TileRow: TYPE ~ REF TileRowRec; TileRowRec: TYPE ~ RECORD [ tiles: SEQUENCE size: NAT OF Tile -- tiles, from left to right. ]; <<>> TileArray: TYPE ~ REF TileArrayRec; TileArrayRec: TYPE ~ RECORD [ tileRows: SEQUENCE size: NAT OF TileRow -- rows, from bottom to top. ]; <<>> NeighborProc: TYPE = PROC [ct1, ct2: CellType] RETURNS [publicPairs: LIST OF CoreGeometry.WirePair _ NIL]; <> <> <> <> <> <> <> <> <> <<>> CreateTiling: PROC [public: WireSeq, tileArray: TileArray, neighborX, neighborY: NeighborProc, name: ROPE _ NIL, props: Properties _ NIL] RETURNS [tiling: CellType]; <> <> <> <> <> <> LayoutNeighborX: NeighborProc; LayoutNeighborY: NeighborProc; <> <<>> SchematicsNeighborX: NeighborProc; SchematicsNeighborY: NeighborProc; <> <> tilingClass: PRIVATE Core.CellClass; TilingData: PRIVATE TYPE = REF TilingDataRec; TilingDataRec: PRIVATE TYPE = RECORD [ tileArray: TileArray, neighborX, neighborY: NeighborProc ]; END.