RefAnyStream.mesa: an interface for applications
of a simple REF ANY stream abstraction
Last Modified On 21-Jan-82 12:03:03 By Paul Rovner
RefAnyStream: DEFINITIONS =
{
TYPEs
Handle: TYPE = REF Object;
Object: TYPE = RECORD[
procs: ObjectProcsHandle,
data: REF ANYNIL
];
ObjectProcsHandle: TYPE = REF ObjectProcs;
ObjectProcs: TYPE = RECORD[
get: PROC[Handle] RETURNS[REF ANY],
put: PROC[Handle, REF ANY],
putBack: PROC[Handle, REF ANY],
flush: PROC[Handle],
close: PROC[Handle],
endOf: PROC[Handle] RETURNS[BOOLEAN],
empty: PROC[Handle] RETURNS[BOOLEAN]
];
ERRORs
Error: ERROR [ec: ErrorCode];
ErrorCode: TYPE = {
NotImplementedForThisStream,
EndOfStream,
attempt to do a get at end of stream
StreamClosed,
raised by operations after close (except flush, reset, close.)
BadIndex
negative length or index to SetIndex
};
PROCs
These are here for convenience. They are examples of
PROCs that create RefAnyStream.Objects. They use PORTs
in their implementations.
CreateCoForkedProducerStream:
PROC[producer: PROC[self: REF ANY, sink: Handle--for use by the producer--],
data: REF ANY]
RETURNS[Handle--for use by the consumer--];
CreateCoForkedConsumerStream:
PROC[consumer: PROC[self: REF ANY, source: Handle--for use by the consumer--],
data: REF ANY]
RETURNS[Handle--for use by the producer--];
}.