<> <> <> <> <<>> DIRECTORY Core, CoreCreate, PipalCore; Tiling: CEDAR DEFINITIONS ~ BEGIN <> <> <> Tile: TYPE ~ REF TileRec; TileRec: TYPE ~ RECORD [ type: Core.CellType, -- type of the tile. renaming: LIST OF CoreCreate.PA _ NIL, -- binding [public of the tile -> public of the whole array]. There is no implicit renaming (contrarily to CoreCreate). 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: Core.CellType] RETURNS [publicPairs: LIST OF PipalCore.WirePair _ NIL]; <> <> <> <> <> <> <> <> <> <<>> CreateTiling: PROC [public: Core.WireSeq, tileArray: TileArray, neighborX, neighborY: NeighborProc, name: Core.ROPE _ NIL, props: Core.Properties _ NIL] RETURNS [tiling: Core.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.