<html><head><style type="text/css"><!-- DIV {margin:0px;} --></style></head><body><div style="font-family:arial,helvetica,sans-serif;font-size:12pt"><div>I would define only 2 i/o functions:<br><br>size_t read(void[] b);<br>size_t write(const(void)[] b);<br><br>And then the various paraphernalia around it (close, open, etc).<br><br>The reason to use void[] is because any array data type can be passed to it without casting (imagine you wanted to read an array of ints).<br>
<br>
Reading and writing a single byte should be discouraged with unbuffered streams.&nbsp; This is how it is in most I/O libs.&nbsp; You build your unbuffered I/O to abstract the OS functions, then build your buffered I/O and fancy functionality on top of it.<br><br>-Steve<br></div><div style="font-family: arial,helvetica,sans-serif; font-size: 12pt;"><br><div style="font-family: arial,helvetica,sans-serif; font-size: 10pt;"><font size="2" face="Tahoma"><hr size="1"><b><span style="font-weight: bold;">From:</span></b> Lars Tandle Kyllingstad &lt;lars@kyllingen.net&gt;<br><b><span style="font-weight: bold;">To:</span></b> Discuss the phobos library for D &lt;phobos@puremagic.com&gt;<br><b><span style="font-weight: bold;">Sent:</span></b> Mon, May 10, 2010 8:14:26 AM<br><b><span style="font-weight: bold;">Subject:</span></b> Re: [phobos] UnbufferedFile, or, abstracting the File ranges<br></font><br>
Well, that would at least mean less work for me. :)<br><br>Which I/O methods should it contain, then, in your opinion?&nbsp; Would<br><br>&nbsp; &nbsp; &nbsp; &nbsp; bool read(ref ubyte b);<br>&nbsp; &nbsp; &nbsp; &nbsp; size_t read(ref ubyte[] b);<br>&nbsp; &nbsp; &nbsp; &nbsp; void write(ubyte b);<br>&nbsp; &nbsp; &nbsp; &nbsp; void write(ubyte[] b);<br><br>suffice?<br><br>-Lars<br><br><br><br>On Mon, 2010-05-10 at 05:02 -0700, Steve Schveighoffer wrote:<br>&gt; Re: byLine and byChunk, I don't think these are a good idea on<br>&gt; unbuffered files.<br>&gt; <br>&gt; For example, your current implementation will be extremely slow.<br>&gt; Reading one char at a time is OK on a buffered file, because most<br>&gt; times its just a simple fetch of a char from a buffer.&nbsp; But your<br>&gt; implementation reads a single character at a time from the actual file<br>&gt; on disk, a very slow operation.<br>&gt; <br>&gt; I think unbuffered files are good for
 when you want to handle the<br>&gt; buffering yourself, or when you want to pass them to child processes.<br>&gt; <br>&gt; -Steve<br>&gt; <br>&gt; <br>&gt; <br>&gt; <br>&gt; ______________________________________________________________________<br>&gt; From: Lars Tandle Kyllingstad &lt;<a ymailto="mailto:lars@kyllingen.net" href="mailto:lars@kyllingen.net">lars@kyllingen.net</a>&gt;<br>&gt; To: Phobos mailing list &lt;<a ymailto="mailto:phobos@puremagic.com" href="mailto:phobos@puremagic.com">phobos@puremagic.com</a>&gt;<br>&gt; Sent: Mon, May 10, 2010 7:40:15 AM<br>&gt; Subject: [phobos] UnbufferedFile, or, abstracting the File ranges<br>&gt; <br>&gt; In the process of designing std.process it has become obvious, as<br>&gt; pointed out by Steve, that Phobos needs facilities for unbuffered I/O.<br>&gt; To that end, I've started writing an UnbufferedFile type, the current<br>&gt; status of which can be seen here:<br>&gt; <br>&gt;&nbsp; &nbsp; &nbsp;
 &nbsp;  Code:<br><span>&gt; <a target="_blank" href="http://github.com/kyllingstad/ltk/blob/master/ltk/stdio.d">http://github.com/kyllingstad/ltk/blob/master/ltk/stdio.d</a></span><br><span>&gt;&nbsp; &nbsp; &nbsp; &nbsp;  Docs: <a target="_blank" href="http://kyllingen.net/code/ltk/doc/stdio.html">http://kyllingen.net/code/ltk/doc/stdio.html</a></span><br>&gt; <br>&gt; (Disclaimer: This is very much a work-in-progress, there's lots of<br>&gt; stuff<br>&gt; that needs to be added yet, and I'd be surprised if there wasn't lots<br>&gt; of<br>&gt; room for improvement, performance-wise.)<br>&gt; <br>&gt; <br>&gt; Now, while writing this it has kind of annoyed me that I have to write<br>&gt; new implementations of the byLine and byChunk ranges.&nbsp; I've personally<br>&gt; found them incredibly useful, so I want them in UnbufferedFile, but<br>&gt; the<br>&gt; ones in std.stdio are tailored for File.<br>&gt; <br>&gt; I therefore suggest we try to abstract
 these ranges, so they can<br>&gt; operate<br>&gt; on general types that define a set of primitives such as read(),<br>&gt; readc()<br>&gt; and readln().<br>&gt; <br>&gt; Are there problems with this?&nbsp; Any comments?<br>&gt; <br>&gt; -Lars<br>&gt; <br>&gt; _______________________________________________<br>&gt; phobos mailing list<br>&gt; <a ymailto="mailto:phobos@puremagic.com" href="mailto:phobos@puremagic.com">phobos@puremagic.com</a><br><span>&gt; <a target="_blank" href="http://lists.puremagic.com/mailman/listinfo/phobos">http://lists.puremagic.com/mailman/listinfo/phobos</a></span><br>&gt; <br>&gt; <br>&gt; _______________________________________________<br>&gt; phobos mailing list<br>&gt; <a ymailto="mailto:phobos@puremagic.com" href="mailto:phobos@puremagic.com">phobos@puremagic.com</a><br>&gt; <a href="http://lists.puremagic.com/mailman/listinfo/phobos"
 target="_blank">http://lists.puremagic.com/mailman/listinfo/phobos</a><br><br><br>_______________________________________________<br>phobos mailing list<br><a ymailto="mailto:phobos@puremagic.com" href="mailto:phobos@puremagic.com">phobos@puremagic.com</a><br><a href="http://lists.puremagic.com/mailman/listinfo/phobos" target="_blank">http://lists.puremagic.com/mailman/listinfo/phobos</a><br></div></div>
</div><br>

      </body></html>