[phobos] std.stdio : ByChunk for File

Lars Tandle Kyllingstad lars at kyllingen.net
Sun May 30 03:05:25 PDT 2010


On Sun, 2010-05-30 at 18:44 +0900, Masahiro Nakagawa wrote:
> 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?


I agree.  That's what I did for UnbufferedFile, which I hope to add to
std.stdio:

http://github.com/kyllingstad/ltk/blob/master/ltk/stdio.d

-Lars



More information about the phobos mailing list