[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