PWCoreLichen.mesa
Copyright © 1986 by Xerox Corporation. All rights reversed.
Created by Bertrand Serlet, July 14, 1986 5:49:00 pm PDT
Bertrand Serlet, July 25, 1986 9:26:53 pm PDT
Mike Spreitzer March 4, 1987 11:39:39 am PST
DIRECTORY Core, CoreFlat, OneToOne;
PWCoreLichen: CEDAR DEFINITIONS = BEGIN
Purpose
This interface defines how do the comparison between the source Core data structure, and the extracted Core data structure. The comparison is done hierarchically. Places where layout has been explicitly associated to the Core data structure are places where source and extracted structures are known to match (or at least should match). The comparison process also decorates both structures with the mapping that maps one into the other.
Basics
CellType: TYPE = Core.CellType;
Wire: TYPE = Core.Wire;
ROPE: TYPE = Core.ROPE;
Properties: TYPE = Core.Properties;
Wires: TYPE = Core.Wires;
The comparison
Compare: PROC [root: CellType];
Layout must be attached to this root CellType.
This function calls itself recursively for cellTypes such that PWCore.GetLayoutAtom[cellType]#NIL.
If there is a process property $AbortBool that is a REF BOOL, it is sampled now & then to decide whether to abort.
ForgetComparisons: PROC [root: CellType];
The fact that a subtree has been compared is remembered. Call this procedure to forget such facts. Call it only on a subtree root (i.e., a cell type with a PWCore layout attachment).
SetAutomorphismHack: PROC [enabled: BOOL];
When the automorphism hack is enabled, when the graph isomorphism gets stuck, it will try to push on by making a random association from a potential automorphism. Since there is no backtracking, this doesn't make a proper graph isomorphism algorithm --- this can give false negatives.
END.