Stream Proposal
    Andrei Alexandrescu 
    SeeWebsiteForEmail at erdani.org
       
    Fri Mar 11 18:36:15 PST 2011
    
    
  
On 3/11/11 6:29 PM, dsimcha wrote:
> The discussion we've had here lately about reading gzipped files has proved
> rather enlightening.  I therefore propose the following high-level design for
> streams, with the details to be filled in later:
>
> 1.  Streams should be built on top of input and output ranges.  A stream is
> just an input or output range that's geared towards performing I/O rather than
> computation.  The border between what belongs in std.algorithm vs. std.stream
> may be a bit hazy.
1a. Formatting should be separated from transport (probably this is the 
main issue with std.stream).
A simple input buffered stream of T would be a range of T[] that has two 
extra primitives:
T[] lookAhead(size_t n);
void leaveBehind(size_t n);
as discussed earlier in a related thread. lookAhead makes sure the 
stream has n Ts in the buffer (or less at end of stream), and 
leaveBehind "forgets" n Ts at the beginning of the buffer.
I'm not sure there's a need for formalizing a buffered output interface 
(we could simply make buffering transparent, in which case there's only 
need for primitives that get and set the size of the buffer).
In case we do want to formalize an output buffer, it would need 
primitives such as:
T[] getBuffer(size_t n);
void commitBuffer(size_t n);
Andrei
    
    
More information about the Digitalmars-d
mailing list