[Interest] QFile::size() and QTextStream::pos()

Elvis Stansvik elvstone at gmail.com
Fri Oct 30 00:08:54 CET 2015


2015-10-29 23:43 GMT+01:00 Igor Mironchik <igor.mironchik at 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 at qt-project.org
> http://lists.qt-project.org/mailman/listinfo/interest



More information about the Interest mailing list