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
_______________________________________________
phobos mailing list
[email protected]
http://lists.puremagic.com/mailman/listinfo/phobos

Reply via email to