On 07/06/2010 05:35 AM, Shin Fujishiro wrote:
Can handles (optionally or necessarily) have low-level I/O primitives
like rawRead() and rawWrite()?

class SomeHandle
{
      void open();
      void close();
     ByChunk byChunk(size_t n);
     ByChar byChar();

     size_t rawRead(ubyte[] buffer);    // low-level input primitive
}

I think that's fine.

byChunk etc. would suffice for usual purposes.  But sometimes we want
to read some user-defined structure from a handle.  With the rawRead
primitive, I can create my own input range for reading a sequence of
variable-length packets from a handle:

ByPacket byPacket(SomeHandle handle);

// This input range uses rawRead() for reading Packets.
struct ByPacket
{
     @property bool empty();
     @property Packet front();
     void popFront();
}
struct Packet
{
     uint signature;
     ubyte[] content;
     uint checksum;
}

Agreed.


Andrei
_______________________________________________
phobos mailing list
[email protected]
http://lists.puremagic.com/mailman/listinfo/phobos

Reply via email to