-- 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 ANY ← NIL ]; 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--]; }.