RoseSets:
CEDAR
DEFINITIONS = {
OPEN RoseTypes;
Element: TYPE = REF ANY;
Set: TYPE = REF SetRep;
SetRep:
TYPE =
RECORD [
class: Class,
instanceData: REF ANY];
Class:
TYPE =
RECORD [
Enumerate: PROC [set: Set, to: Consumer],
TestMembership: PROC [set: Set, elt: Element]
];
Consumer:
TYPE =
RECORD [
data: REF ANY,
consume: PROC [data: REF ANY, elt: Element]
];
CellsOfType: PROC [pattern: ROPE, sim: Simulation ← NIL] RETURNS [Set];
CellsOfName: PROC [pattern: ROPE, sim: Simulation ← NIL] RETURNS [Set];
ChildCells: PROC [s: Set, namePattern: ROPE ← NIL] RETURNS [Set];
ParentCells: PROC [s: Set, namePattern: ROPE ← NIL] RETURNS [Set];
InterfaceNodes: PROC [s: Set] RETURNS [Set];
InternalNodes: PROC [s: Set] RETURNS [Set];
ContainingCells: PROC [s: Set] RETURNS [Set];
Intersect: PROC [a, b: Set] RETURNS [Set];
Union: PROC [a, b: Set] RETURNS [Set];
Difference: PROC [a, b: Set] RETURNS [Set];
SymmetricDifference: PROC [a, b: Set] RETURNS [Set];
EnumerateWithoutDuplicates: PROC [s: Set, to: Consumer];
}.