Formatted read consumes input

Denis Shelomovskij verylonglogin.reg at gmail.com
Fri Aug 24 06:09:20 PDT 2012


24.08.2012 16:16, monarch_dodra пишет:
> On Friday, 24 August 2012 at 11:18:55 UTC, Dmitry Olshansky wrote:
>> On Thursday, 23 August 2012 at 11:33:19 UTC, monarch_dodra wrote:
>>> I've traced the root issue to formattedRead's signature, which is:
>>> uint formattedRead(R, Char, S...)(ref R r, const(Char)[] fmt, S args);
>>>
>>
>> As I explained above the reason is because the only sane logic of
>> multiple reads is to consume input and to do so it needs ref.
>
> I had actually considered that argument. But a lot of algorithms have
> the same approach, yet they don't take refs, they *return* the consumed
> front:
>
> ----
> R formattedRead(R, Char, S...)(R r, const(Char)[] fmt, S args)
>
> auto s2 = formatedRead(s, "%d", &v);
> ----
>
> Or arguably:
>
> ----
> Tuple!(size_t, R) formattedRead(R, Char, S...)(R r, const(Char)[] fmt, S
> args)
> ----
>
> "minCount", "boyerMooreFinder" and "levenshteinDistanceAndPath" all take
> this approach to return a consumed range plus an index/count.

It's because `formattedRead` is designed to work with an input range 
which isn't a forward range (not save-able).

-- 
Денис В. Шеломовский
Denis V. Shelomovskij


More information about the Digitalmars-d mailing list