<> <> <> DIRECTORY CD, HashTable, Rope, RTBasic; Connections: CEDAR DEFINITIONS = BEGIN <> <> <> ROPE: TYPE = Rope.ROPE; Side: TYPE ~ RTBasic.Side; Object: TYPE = CD.Object; Layer: TYPE = CD.Layer; <> Table: TYPE = HashTable.Table; -- A HashTable with operations SeqIndex: TYPE = HashTable.SeqIndex; Key: TYPE = REF; Net: TYPE = REF NetRec; NetRec: TYPE = RECORD [ name: ROPE _ NIL, -- required to be unique among the nets width: INT _ 0, -- 0 default means minimum size segments: Segments _ NIL -- pins for this net ]; Segments: TYPE = LIST OF Segment; Segment: TYPE = REF SegmentRec; SegmentRec: TYPE = RECORD [ name: Rope.ROPE _ NIL, -- optional name of connection object: Object _ NIL, -- the owning object range: Range _ [0, 0], -- in interest coordinate system side: Side, -- side toward which routing should connect layer: Layer _ CD.undefLayer ]; Range: TYPE = RECORD [ min, max: INT -- range of segment along side ]; <> CreateForRopes: PROC [mod: SeqIndex _ 17] RETURNS [Table]; CreateForRefs: PROC [mod: SeqIndex _ 17] RETURNS [Table]; <> Fetch: PROC [table: Table, key: Key] RETURNS [found: BOOLEAN, net: Net]; <> <> <> Store: PROC [table: Table, key: Key, net: Net] RETURNS [BOOLEAN]; <> <> InsertPins: PROC [table: Table, object: CD.Object, pinFilter: PinFilterProc _ NIL, makeHashKey: HashKeyProc _ NIL]; <> PinFilterProc: TYPE = PROC [inst: CD.Instance, obj: CD.Object] RETURNS [keepIt: BOOLEAN _ TRUE]; HashKeyProc: TYPE = PROC [instance: CD.Instance] RETURNS [key: Rope.ROPE]; <> EnumerateNets: PROC [table: Table, action: EachNetAction] RETURNS [quit: BOOLEAN]; <> <> <> <> EachNetAction: TYPE = PROC [key: Key, net: Net] RETURNS [quit: BOOLEAN _ FALSE]; EnumerateSegments: PROC [net: Net, action: EachSegmentAction] RETURNS [quit: BOOLEAN]; <> <> <> <> EachSegmentAction: TYPE = PROC [net: Net, segment: Segment] RETURNS [quit: BOOLEAN _ FALSE]; END.