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 CoreFlat
LowerInstancePath:
PROC [path, by: InstancePath]
RETURNS [lower: InstancePath];
Concatenates path after by.
LowerFlatCell:
PROC [fc: FlatCellTypeRec, by: FlatCellTypeRec]
RETURNS [lower: FlatCellTypeRec];
LowerFlatWire:
PROC [fw: FlatWireRec, by: FlatCellTypeRec]
RETURNS [lower: FlatWireRec];
}.