DIRECTORY Core, CoreClasses, CoreFlat, HashTable; CoreStructuralComparison: CEDAR DEFINITIONS = { FlattenAndCompare: PROC [ ctA, ctB: Core.CellType, wireHints, instanceHints: HashTable.Table ] RETURNS [isomorphic: BOOL]; DescendantWire: TYPE = REF DescendantWirePrivate; DescendantWirePrivate: TYPE = CoreFlat.FlatWireRec --RECORD [path: CoreFlat.PackedPath, wire: Core.Wire]--; DescendantCellInstance: TYPE = REF DescendantCellInstancePrivate; DescendantCellInstancePrivate: TYPE = CoreFlat.FlatInstanceRec --RECORD [path: CoreFlat.PackedPath, instance: CoreClasses.CellInstance]--; DescendantList: TYPE = LIST OF Descendant; Descendant: TYPE = REF ANY--actually UNION [DescendantWire, DescendantCellInstance]--; Warning: SIGNAL [ kind: WarningKind, fromA, fromB: DescendantList ]; WarningKind: TYPE = {stuck, difference}; }. όCoreStructuralComparison.Mesa Spreitzer, April 28, 1986 4:51:35 pm PDT These tables map a descendant of ctA into a descendant of ctB. They will be augmented with the associations discovered. Non-isomorphisms are reported by raising the SIGNAL Warning. difference is when a color has a different number of vertices from the two graphs; stuck is when both graphs contribute the same number of vertices to a color, but that number is greater than one (we don't try picking a pair to try to resolve this). ΚJ– "cedar" style˜code™K™(—K˜KšΟk œ(˜1K˜šΡbnxœœ œ˜/K˜šΟnœ˜šœ˜Kšœ˜šœ)˜)K™>K™8—Kšœ˜—šœœ˜K™<——K˜Kšœœœ˜1KšœœΟc7œ˜kK˜Kšœœœ˜AKšœœ Jœ˜ŠK˜Kšœœœœ ˜*Kšœ œœ ;œ˜VK˜šŸœœ˜K˜Kšœ˜K˜—K˜šœ œ˜(Kšœω™ω—K˜K˜——…—FŒ