2015-10-29 23:43 GMT+01:00 Igor Mironchik <igor.mironc...@gmail.com>: > > > On 30.10.2015 00:05, Thiago Macieira wrote: >> >> On Thursday 29 October 2015 21:49:40 Igor Mironchik wrote: >>> >>> On 29.10.2015 06:51, Thiago Macieira wrote: >>>> >>>> On Thursday 29 October 2015 05:51:36 Igor Mironchik wrote: >>>>> >>>>> P.S. Why QTextStream doesn't have something like get(), peek(), >>>>> unget(), >>>>> putback()? >>>> >>>> Explain what you would want those functions to do. >>> >>> The same like in std::istream, for example... >> >> The iostreams are, in my opinion, the worst part of the Standard Library. >> I >> don't consider them a good implementation, even if they have good ideas >> (<< >> and >>). >> >> istream QTextStream >> get read and readLine > > > Agree, read(), readLine(), and overloaded >> are completely cover get() > usage. > >> the overload with a delimiter: there was a discussion about >> replacing >> readLine with that, but it hasn't happened >> peek <missing, no one has ever asked for it> > > > It can be useful in some cases, for example, when you implementing some sort > of parsers where very often you need to know what next character is but > don't really need to seek stream's position. > >> unget seek(pos() - 1) (slow! can't be avoided) > > > Slow? This is not the main problem. The main problem is that that seek() and > pos() uses device's units. But I need to seek() one character back, and what > then just -1, or -2, or something else? unget() can't be implemented with > methods of QTextStream.
Sorry if I'm missing something, but wouldn't you have that problem with std::istream::unget as well? It operates on chars (bytes). Elvis > >> putback <missing, really bad idea!> >> >> putback does the same as unget, plus adds a character that wasn't >> necessarily >> the last character that was read. Plus, the function has implementation- >> defined behaviour. > > > Agree. Without putback() I can live and be happy. And I really can't imagine > why I need to putback() something different from that that was really read. > > > But peek() and unget() are very useful. > > In my task I did parsing with just three functions like > > skipWhiteSpace( QTextStream & stream, QList< QChar > & returned ), > > skipComment( QTextStream & stream, QList< QChar > & returned ), > > readWord( QTextStream & stream, QList< QChar > & returned ) > > where the main idea is that they read from "returned" if its not empty and > only then from stream, and they can prepend() to the "returned" what equal > to unget(). Such approach solved the problem with pos() and seek() and > parsing effectiveness doesn't depends on buffer implementation of > QTextStream... > > -- > Best Regards, > Igor Mironchik. > > _______________________________________________ > Interest mailing list > Interest@qt-project.org > http://lists.qt-project.org/mailman/listinfo/interest _______________________________________________ Interest mailing list Interest@qt-project.org http://lists.qt-project.org/mailman/listinfo/interest