<> <> <> <> <> <> DIRECTORY CD, Core, CoreGeometry; Sinix: CEDAR DEFINITIONS = BEGIN <> <> <> <> <> CellType: TYPE = Core.CellType; Wire: TYPE = Core.Wire; Wires: TYPE = Core.Wires; Object: TYPE = CD.Object; Properties: TYPE = Core.Properties; ROPE: TYPE = Core.ROPE; <> ExtractProc: TYPE = PROC [obj: Object, mode: Mode, properties: CD.PropList _ NIL, userData: REF _ NIL] RETURNS [result: REF, props: Properties _ NIL]; <> <> <<- NIL. The object should be forgotten completely.>> <<- a Wire. The returned wire is decorated with mode.decoration.pinsProp. There might be a name. The returned wire is always copied by Sinix, so caching should not be feared... Dagness is considered.>> <<- a LIST OF Wire. The returned wires are decorated with mode.decoration.pinsProp. There might be a name. The returned wire are always copied by Sinix, so caching should not be feared... Dagness is considered across returned wires.>> <<- a CellType. The returned cellType has its public decorated with mode.decoration.>> <> <> Extract: ExtractProc; <> <> <> RegisterExtractProc: PROC [key: ATOM, extractProc: ExtractProc]; <> <> <> <<>> ExtractCell: ExtractProc; <> <> ExtractAbut: ExtractProc; <> ExtractExpand: ExtractProc; <> ExtractRect: ExtractProc; <> <> <> <> ExtractPin: ExtractProc; <> <> <> <> ExtractAtomic: ExtractProc; <> <> <> ExtractNull: ExtractProc; <> <> <> Mode: TYPE = REF ModeRec; ModeRec: TYPE = RECORD [ decoration: CoreGeometry.Decoration, -- to store/retrieve decorations extractProcProp: ATOM, -- must be the key of an ExtractProc previously registered equalProc: PROC [Object, CD.PropList, REF, CD.PropList, REF] RETURNS [BOOL], -- called with the properties and userData for the previous call and the ones for this call and returns TRUE if they are "Equal". nbOfLayers: NAT _ 1, -- determines the number of interesting layers corresponding to subinstances of obj. Efficiency hack: should be defaulted for clients unaware of implementation details. instanceLayer: PROC [CD.Instance] RETURNS [LayerRange], -- determines the [min .. max] layers corresponding to a subinstance of obj. Efficiency hack: should be set to DefaultInstanceLayer for clients unaware of implementation details. userData: PROC [CD.Design] RETURNS [REF] _ NIL, -- Return the default user data according to current design (used by Sisyph) fusionByName: FusionByNameMethod _ layout, -- Specifies which kind of fusion by name should be done [this is slightly orthogonal to the concept of mode-independent extraction, but life is hard]. touchProc: CoreGeometry.TouchProc -- Specifies if two decorations touch and provoke a geometric fusion. ]; LayerRange: TYPE = RECORD [min, max: NAT]; <> FusionByNameMethod: TYPE = {layout, none, schematics}; AlwaysFalse: PROC [obj: CD.Object, properties1: CD.PropList, userData1: REF, properties2: CD.PropList, userData2: REF] RETURNS [BOOL _ FALSE]; CompareProps: PROC [obj: CD.Object, properties1: CD.PropList, userData1: REF, properties2: CD.PropList, userData2: REF] RETURNS [BOOL]; DefaultInstanceLayer: PROC [CD.Instance] RETURNS [LayerRange]; satellitesProp: ATOM; <> <> <> <<>> InternalBug: SIGNAL [name: ROPE]; <> <> CallerBug: SIGNAL []; <> FusionPropMismatch: SIGNAL [name: ROPE, prop: ATOM, value1, value2: REF]; <> <> <> <<>> FusionStructureMismatch: SIGNAL [name: ROPE, wire1, wire2: Wire]; <> <> <<>> StructureMismatch: SIGNAL [name: ROPE, actual, subPublic: Wire]; <> <> <<>> FusionByNameMismatch: SIGNAL [name, msg: ROPE, wire: Wire]; <> <> <> <<>> StructuralLoop: SIGNAL [name: ROPE, wire: Wire]; <> <> <> <> Cache: PRIVATE TYPE = REF CacheRec; CacheRec: PRIVATE TYPE = RECORD [ mode: Mode, properties: CD.PropList _ NIL, userData: REF _ NIL, result: REF, props: Properties _ NIL ]; cacheProp: PRIVATE ATOM; FuseProperties: PRIVATE PROC [mode: Sinix.Mode, fused, root: Wire, name: ROPE]; <> <> END.