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. ΰConnections.mesa Copyright (C) 1986 by Xerox Corporation. All rights reserved. Created by Bryan Preas, May 20, 1986 2:38:37 pm 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. They do the right thing for Rope and Ref 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 Κ[˜Jšœ™Jšœ?™?J™3J˜šΟk œ˜ Jšœ˜—J˜šΟn œœ œ˜!Jš˜J˜head™Ibodyšœv™v—K™ Jšœœœ˜Icodešœœ˜Jšœœœ˜Jšœœœ˜K™JšœœΟc˜?Jšœ œ˜$Jšœœœ˜Jšœœœ˜šœœœ˜JšœœœŸ(˜>Jšœœ Ÿ˜4JšœœŸ˜/J˜—J˜Jšœ œœœ ˜!Jšœ œœ ˜šœ œœ˜Jšœ œœŸ˜6JšœœŸ˜,JšœŸ ˜9JšœŸ+˜