DIRECTORY CD, RefTab, Rope, RTBasic; Connections: CEDAR DEFINITIONS = BEGIN ROPE: TYPE = Rope.ROPE; Side: TYPE ~ RTBasic.Side; Object: TYPE = CD.Object; Layer: TYPE = CD.Layer; Table: TYPE = RefTab.Ref; -- A RefTab with operations 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 netDat: REF ANY _ NIL -- for client use ]; 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, segmentDat: REF ANY _ NIL -- for client use ]; Range: TYPE = RECORD [ min, max: INT -- range of segment along side ]; CreateForRopes: PROC [mod: NAT _ 17] RETURNS [Table]; Fetch: PROC [table: Table, key: Key] RETURNS [found: BOOL, net: Net]; Store: PROC [table: Table, key: Key, net: Net] RETURNS [BOOL]; InsertPins: PROC [table: Table, object: CD.Object, pinFilter: PinFilterProc _ NIL, makeHashKey: HashKeyProc _ NIL]; PinFilterProc: TYPE = PROC [inst: CD.Instance, obj: CD.Object] RETURNS [keepIt: BOOL _ TRUE]; HashKeyProc: TYPE = PROC [instance: CD.Instance] RETURNS [key: Rope.ROPE]; EnumerateNets: PROC [table: Table, action: EachNetAction] RETURNS [quit: BOOL]; EachNetAction: TYPE = PROC [key: Key, net: Net] RETURNS [quit: BOOL _ FALSE]; EnumerateSegments: PROC [net: Net, action: EachSegmentAction] RETURNS [quit: BOOL]; EachSegmentAction: TYPE = PROC [net: Net, segment: Segment] RETURNS [quit: BOOL _ FALSE]; END.  Connections.mesa Copyright Σ 1986, 1987 by Xerox Corporation. All rights reserved. Created by Bryan Preas, September 9, 1987 1:14:22 pm PDT Bertrand Serlet April 27, 1987 0:14:30 am PDT Theory This interface provides a simple way to describe interconnection requirements among a group of Objects to be laid out. Common Types Types Building The Connection Table creates new table, whose length is mod. Does the right thing for Rope tables. looks up key in table, returns associated net (if any) if found is TRUE, net is value associated with given key if found is FALSE, net is NIL returns TRUE after inserting new pair returns FALSE after overwriting old net for existing key-net pair put the pins on the interest rec of th object in the table if pinFilter returns true. Using The Connection Table enumerates pairs currently in symbol table in unspecified order pairs inserted/deleted during enumeration may or may not be seen applies action to each pair until action returns TRUE or no more pairs returns TRUE if some action returns TRUE enumerates segments currently in net in unspecified order segments inserted/deleted during enumeration may or may not be seen applies action to each segment until action returns TRUE or no more segments returns TRUE if some action returns TRUE Κ•˜codešœ™KšœB™BKšœ8™8Kšœ*Οk™-—K˜š œ˜ Kšœ˜—K˜KšΟn œœ œ˜&head™Kšœv™v—™ Kšœœœ˜Kšœœ˜Kšœœœ˜Kšœœœ˜—™KšœœΟc˜7Kšœœœ˜Kšœœœ˜šœœœ˜KšœœœŸ(˜>Kšœœ Ÿ˜4KšœœŸ˜/KšœœœœŸ˜)K˜K˜—Kšœ œœœ ˜!Kšœ œœ ˜šœ œœ˜Kšœ œœŸ˜6KšœœŸ˜+KšœŸ ˜8KšœŸ+˜Kšœœ™%Kšœœ4™AK˜—š ž œœœ$œœ˜sKšœU™U—Kšœœœœœ œ œœ˜]Kš œ œœ œ œ œ˜J—™šž œœ'œœ˜OKšœ?™?Kšœ@™@Kšœ1œ™FKšœœ™(—š œœœœœœ˜MK˜—šžœœ'œœ˜SKšœ9™9KšœC™CKšœ4œ™LKšœœ™(—Kš œœœœœœ˜YK˜—Kšœ˜—…—ϊ›