phobos: What type to use instead of File when doing I/O on streams?

Ali Çehreli via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Mon Nov 9 11:38:06 PST 2015


On 11/09/2015 10:18 AM, J.Frank wrote:
> On Monday, 9 November 2015 at 14:48:35 UTC, Ali Çehreli wrote:
>> import std.stdio;
>> import std.range;
>>
>> void foo(I, O)(I in_stream, O out_stream)
>>         if (isInputRange!I &&
>>             isOutputRange!(O, ElementType!I)) {
>>
>>     // in_stream.seek(3); // compile error - good :)
>>
>>     foreach (element; in_stream) {
>>         out_stream.put(element);
>>     }
>> }
>>
>> void main(string[] args)
>> {
>>     // Also consider .byLine, which is faster and risky
>>     foo(stdin.byLineCopy,
>>         stdout.lockingTextWriter);
>> }
>>
>> Ali
>
> Uhm... no. That's not a solution to my problem. Ranges are not
> (I/O-)streams.
>

As far as I understand, the issue is to prevent the seek() call at 
compile time, right? If so, the range types that byLine() and 
byLineCopy() return does not have such a member function.

I think the code achieves that goal because we are not dealing with File 
objects anymore.

Ali



More information about the Digitalmars-d-learn mailing list