<> <> DIRECTORY RoseTypes; 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]; }.