Abstract Cut Sets
Cut:
TYPE =
RECORD [
MembershipTester: CutMembershipTester,
data: REF ANY ← NIL];
CutMembershipTester: TYPE = PROC [cutData: REF ANY, root: CellType, cellType: CellType, flatCell: FlatCellTypeRec, instance: CellInstance] RETURNS [BOOL];
Includes:
PROC [cut: Cut, root: CellType, cellType: CellType, flatCell: FlatCellTypeRec, instance: CellInstance]
RETURNS [
BOOL]
= INLINE {RETURN [cut.MembershipTester[cut.data, root, cellType, flatCell, instance]]};
SetCut: PROC [CutSet] RETURNS [Cut];
leaves: Cut;
Flat printing
FlatPrint:
PROC [
root: CellType,
filter: Filter ← NIL,
to: IO.STREAM,
Annotator: PROC [subject: Descendant, to: IO.STREAM] ← NIL,
leaves: Cut
];
Filter: TYPE ~ PROC [cellType: CellType, flatCell: FlatCellTypeRec, instance: CellInstance, bindings: Bindings] RETURNS [BOOL];
PrintNeighborhood:
PROC [
root: CellType,
of: DescendantListList,
to: IO.STREAM,
Annotator: PROC [subject: Descendant, to: IO.STREAM] ← NIL,
leaves: Cut
];
MakeNeighborhoodFilter: PROC [of: DescendantListList, Consume: PROC [Filter]];
DescendantListList: TYPE = LIST OF DescendantList;
DescendantList: TYPE = LIST OF Descendant;
Descendant: TYPE = REF ANY--actually UNION [FlatWire, FlatCellType, REF InstancePath]--;
Helpful things for CoreOps
VisitWireSeq:
PROC [seq: Wire, eachWire:
CO.EachWireProc]
RETURNS [quit:
BOOL];
Calls VisitWire on each element of the seq.
VisitBindingSeq:
PROC [actual, public: Wire, eachWirePair:
CO.EachWirePairProc]
RETURNS [quit:
BOOL];
Calls VisitBinding on each element of the two sequences.
CorrectConform:
PROC [actual, public: Wire]
RETURNS [
BOOL];
Works for DAGs, not just trees.
}.