block file reads and lazy utf-8 decoding
Jon D via Digitalmars-d-learn
digitalmars-d-learn at puremagic.com
Wed Dec 9 18:05:23 PST 2015
On Thursday, 10 December 2015 at 00:36:27 UTC, Jon D wrote:
> Question I have is if there is a better way to do this. For
> example, a different way to construct the lazy
> 'decodeUTF8Range' rather than writing it out in this fashion.
A further thought - The decodeUTF8Range function is basically
constructing a lazy wrapper range around decodeFront, which is
effectively combining a 'front' and 'popFront' operation. So
perhaps a generic way to compose a wrapper for such functions.
>
> auto decodeUTF8Range(Range)(Range charSource)
> if (isInputRange!Range && is(Unqual!(ElementType!Range) ==
> char))
> {
> static struct Result
> {
> private Range source;
> private dchar next;
>
> bool empty = false;
> dchar front() @property { return next; }
> void popFront() {
> if (source.empty) {
> empty = true;
> next = dchar.init;
> } else {
> next = source.decodeFront;
> }
> }
> }
> auto r = Result(charSource);
> r.popFront;
> return r;
> }
More information about the Digitalmars-d-learn
mailing list