[phobos] std.stdio : ByChunk for File

Masahiro Nakagawa repeatedly at gmail.com
Sun May 30 02:44:32 PDT 2010


File has byChunk method that returns chunks but chunks isn't Range.
So, Range can't treat chunks.
I want chunks of Range version like ByLine(and I hope byChunk returns  
ByChunk).

Following code is a simple implementation.
-----
/**
  * Range that reads a chunk at a time.
  */
struct ByChunk
{
   private:
     File    file_;
     ubyte[] chunk_;


   public:
     this(File file, size_t size)
     in
     {
         assert(size, "size must be larger than 0");
     }
     body
     {
         file_  = file;
         chunk_ = new ubyte[](size);

         popFront();
     }

     /// Range primitive operations.
     @property bool empty() const
     {
         return !file_.isOpen;
     }

     /// ditto
     @property ubyte[] front()
     {
         return chunk_;
     }

     /// ditto
     void popFront()
     {
         enforce(file_.isOpen);

         chunk_ = file_.rawRead(chunk_);
         if (!chunk_.length)
             file_.detach();
     }
}
-----

What do you think?


Masahiro


More information about the phobos mailing list