Andrei Alexandrescu wrote:
http://www.reddit.com/r/programming/comments/10u6sk/component_programming_in_d/

Nice article!

There, I found an interesting way of writing ranges that are not explicitly initialized:

    private import core.stdc.stdio;

    struct StdinByChar {

        @property bool empty() {
            if (hasChar)
                return false;
            auto c = fgetc(stdin);
            if (c == EOF)
                return true;
            ch = cast(char)c;
            hasChar = true;
            return false;
        }

        @property char front() {
            return ch;
        }

        void popFront() {
            hasChar = false;
        }

      private:
        char ch;
        bool hasChar;
    }

This is unusual to me that popFront() code is shifted to empty(), but I guess that's necessary because structs doesn't have () ctors.

Reply via email to