<> <> <> <> <> <<>> DIRECTORY CD, CMosB, CoreGeometry, HashTable, Rope; OnionCore: CEDAR DEFINITIONS IMPORTS CMosB = BEGIN <> ROPE: TYPE = Rope.ROPE; Object: TYPE = CD.Object; Side: TYPE = CoreGeometry.Side; <> Arc: TYPE = REF ArcRec; ArcRec: TYPE = RECORD [ rect: CD.Rect, -- this is the bounding rect of all components. The arc, whatever its thickness, is included inside this bbox. segs: LIST OF Seg -- the ring segments, non sorted ]; Seg: TYPE = REF SegRec; SegRec: TYPE = RECORD [point1, point2: INT, side1, side2: Side]; -- always rotating in the direct direction (counterClockWise). By convention, point1 is included but point2 is not. EmptyArc: PROC [rect: CD.Rect] RETURNS [arc: Arc]; Length: PROC [arc: Arc] RETURNS [length: INT _ 0]; ConnectSegBitToArc: PROC [min, max: INT, side: Side, arc: Arc] RETURNS [connection: Arc]; <<>> <> NotOverlapping: PROC [arc1, arc2: Arc, minDist: INT] RETURNS [notOverlapping: BOOL _ TRUE]; <<>> <> <> Union: PROC [arc1, arc2: Arc] RETURNS [union: Arc]; EachSegBitProc: TYPE = PROC [min, max: INT, side: Side]; EnumerateSegBits: PROC [arc: Arc, eachSegBit: EachSegBitProc]; <> Net: TYPE = REF NetRec; NetRec: TYPE = RECORD [ name: ROPE, -- must be filled by the user width: INT _ 0, -- 0 default means minimum size routeEveryOuterSeg: BOOL _ TRUE, -- FALSE if there is redundancy in outer pins facing: BOOL _ FALSE, -- already facing chosen: BOOL _ FALSE, -- chosen for being routed eval: INT _ 0, -- evaluation function arc: Arc _ NIL, -- arc used by this net innerSegs, outerSegs, newInnerSegs: LIST OF Seg _ NIL -- pins of the net, position is relative to the [0, 0] of the interest rect of the outer. newInnerPins is used internally (pins for the next iteration) ]; <> IncludeInOuter: PROC [outer: Object, nets: HashTable.Table, innerPos: CD.Position, innerSize, outerSize: CD.Position, radialLayer: CD.Layer _ CMosB.met, ringLayer: CD.Layer _ CMosB.met2] RETURNS [done: BOOL]; < Net (REF can conveniently be a Core.Wire or a ROPE)>> <> <> <<>> Center: PROC [inner, outer: Object] RETURNS [innerPos: CD.Position]; <> END.