[Issue 9599] File.byLine doesn't function properly with take
d-bugmail at puremagic.com
d-bugmail at puremagic.com
Wed Feb 27 03:35:13 PST 2013
http://d.puremagic.com/issues/show_bug.cgi?id=9599
monarchdodra at gmail.com changed:
What |Removed |Added
----------------------------------------------------------------------------
CC| |monarchdodra at gmail.com
--- Comment #1 from monarchdodra at gmail.com 2013-02-27 03:35:11 PST ---
(In reply to comment #0)
> Using 2.062, Regarding the following code:
The bug is actually inside byLine itself, so we can remove take from the
equation. The problem is that byLine is over-eager:
1) Creating a front element eagerly pops that element.
2) poping an element eagerlly parses the next, effectivelly popping it off too
if it is never read:
Reduced test showing this:
//----
import std.stdio;
void main()
{
auto file = File.tmpfile();
file.write("1\n2\n3\n4\n5");
file.rewind();
auto fbl1 = file.byLine();
writeln(fbl1.front); //prints 1.
auto fbl2 = file.byLine();
writeln(fbl2.front); //prints 2... Wait. Who popped off 1?
fbl2.popFront(); //pops off 2, and consumes 3.
auto fbl3 = file.byLine();
writeln(fbl3.front); //prints 4.
}
//----
Ideally, byLine should be reworked to be a little more lazy, and better
preserve the integrity of its underlying stream:
- "front means do NOT modify the referenced container"
- "pop means remove the CURRENT element, and stop there"
byLine is obviously not doing that. The fact that it is *just* an input range
does not mean it gets to bypass standard rules.
--
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
More information about the Digitalmars-d-bugs
mailing list