CoreStructuralComparison:
CEDAR
DEFINITIONS = {
FlattenAndCompare:
PROC [
ctA, ctB: Core.CellType,
wireHints, instanceHints: HashTable.Table
These tables map a descendant of ctA into a descendant of ctB.
They will be augmented with the associations discovered.
]
RETURNS [isomorphic:
BOOL];
Non-isomorphisms are reported by raising the SIGNAL Warning.
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};
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).
}.