On Sat, 16 Oct 2010 01:01:33 +0400, Andrei Alexandrescu <[email protected]> wrote:

On 10/15/10 15:54 CDT, Kagamin wrote:
Andrei Alexandrescu Wrote:

Whatever interface(s) we find work best for various kinds of streams, we
should make them play nice with ranges. Burst streams (the kind that
offer data in variable-size chunks) work great with a range interface.

I was thinking about chunk size to be supplied by user like this

int readInt()
{
   ubyte[] buffer=read(4);
   assert(buffer.length==4); // can this trigger?
   return *cast(int*)buffer.ptr;
}


ubyte[] read() and ubyte[] read(size_t size) both require buffering (e.g. BufferedStream adapter). As such, it can provide stronger guaranties over raw streams.

That's a fair point. I don't think you can assert, there could always be the situation that there was not enough data. Anyhow, wrt byChunk I was thinking of adding a property for changing the chunk size prior to popFront():

auto chunks = File("file.bin").byChunk(8);
// now chunks.front() is a ubyte[] containing 8 bytes
chunks.chunkSize = 4;
chunks.popFront();
// now chunks.front() is a ubyte[] containing 4 bytes
chunks.chunkSize = 4096;
for (; !chunks.empty; chunks.popFront()) {
     // handle 4KB at a time
}


Andrei

Reply via email to