RoseValueSequences:
CEDAR
DEFINITIONS = {
OPEN RoseTypes, RoseSets;
Header: TYPE = REF HeaderRep;
HeaderRep:
TYPE =
RECORD [
data: REF ANY,
EnumerateElts: PROC [h: Header, to: HeaderEltConsumer]
];
HeaderEltConsumer:
TYPE =
RECORD [
data: REF ANY,
consume: PROC [elt: HeaderElt, data: REF ANY]
];
HeaderElt:
TYPE =
RECORD [
path: NamePath,
type: NodeType,
val: Ptr];
NamePath: TYPE = LIST OF ROPE;
Producer: TYPE = REF ProducerRep;
ProducerRep:
TYPE =
RECORD [
data: REF ANY,
giveHeader: PROC [data: REF ANY] RETURNS [header: Header],
synch: STREAM];
Consumer: TYPE = REF ConsumerRep;
ConsumerRep:
TYPE =
RECORD [
data: REF ANY,
takeHeader: PROC [data: REF ANY, header: Header],
synch: STREAM
];
FromFile: PROC [fileName: ROPE] RETURNS [p: Producer];
ToFile: PROC [fileName: ROPE] RETURNS [c: Consumer];
ProduceFromSimulation: PROC [sim: Simulation, nodes: Set, stripPrefix: NamePath ← NIL] RETURNS [p: Producer];
CheckAgainstSimulation: PROC [sim: Simulation, addPrefix: NamePath ← NIL] RETURNS [c: Consumer];
Copy: PROC [from: Producer, to: Consumer];
CreatePipe: PROC RETURNS [p: Producer, c: Consumer];
}.