From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 36127 invoked by alias); 15 Nov 2017 20:52:00 -0000 Mailing-List: contact libstdc++-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: libstdc++-owner@gcc.gnu.org Received: (qmail 36077 invoked by uid 89); 15 Nov 2017 20:52:00 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-17.6 required=5.0 tests=AWL,BAYES_00,DATE_IN_PAST_96_XX,GIT_PATCH_0,GIT_PATCH_1,GIT_PATCH_2,GIT_PATCH_3,KAM_INFOUSMEBIZ,KAM_LAZY_DOMAIN_SECURITY,KB_WAM_FROM_NAME_SINGLEWORD,RDNS_DYNAMIC,URIBL_SBL autolearn=ham version=3.3.2 spammy=H*m:info, D*info, sbumpc, snextc X-Spam-User: qpsmtpd, 2 recipients X-HELO: void-ptr.info Received: from pppoe.185.44.68.223.lanport.ru (HELO void-ptr.info) (185.44.68.223) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Wed, 15 Nov 2017 20:51:58 +0000 Received: from ptr by void-ptr.info with local (Exim 4.72) (envelope-from ) id 1eF4f5-0005NJ-4s; Wed, 15 Nov 2017 23:51:55 +0300 Message-Id: References: <41ed5a91-9b23-97a4-ab38-4728091279d7@gmail.com> <5bef157d-1ae5-3e06-99eb-8f93ff18179b@gmail.com> <2285784f-dfce-3e48-30bf-902fe1d157b8@gmail.com> From: Petr Ovtchenkov Date: Wed, 15 Nov 2017 20:52:00 -0000 Subject: [PATCH 1/4] Revert "2017-10-04 Petr Ovtchenkov " To: libstdc++@gcc.gnu.org Cc: gcc-patches@gcc.gnu.org X-IsSubscribed: yes X-SW-Source: 2017-11/txt/msg00036.txt.bz2 This reverts commit 0dfbafdf338cc6899d146add5161e52efb02c067 (svn r253417). --- libstdc++-v3/include/bits/streambuf_iterator.h | 59 ++++++++++++++------------ 1 file changed, 33 insertions(+), 26 deletions(-) diff --git a/libstdc++-v3/include/bits/streambuf_iterator.h b/libstdc++-v3/include/bits/streambuf_iterator.h index 081afe5..69ee013 100644 --- a/libstdc++-v3/include/bits/streambuf_iterator.h +++ b/libstdc++-v3/include/bits/streambuf_iterator.h @@ -95,7 +95,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION // NB: This implementation assumes the "end of stream" value // is EOF, or -1. mutable streambuf_type* _M_sbuf; - int_type _M_c; + mutable int_type _M_c; public: /// Construct end of input stream iterator. @@ -122,29 +122,28 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION char_type operator*() const { - int_type __c = _M_get(); - #ifdef _GLIBCXX_DEBUG_PEDANTIC // Dereferencing a past-the-end istreambuf_iterator is a // libstdc++ extension - __glibcxx_requires_cond(!_S_is_eof(__c), + __glibcxx_requires_cond(!_M_at_eof(), _M_message(__gnu_debug::__msg_deref_istreambuf) ._M_iterator(*this)); #endif - return traits_type::to_char_type(__c); + return traits_type::to_char_type(_M_get()); } /// Advance the iterator. Calls streambuf.sbumpc(). istreambuf_iterator& operator++() { - __glibcxx_requires_cond(_M_sbuf && - (!_S_is_eof(_M_c) || !_S_is_eof(_M_sbuf->sgetc())), + __glibcxx_requires_cond(!_M_at_eof(), _M_message(__gnu_debug::__msg_inc_istreambuf) ._M_iterator(*this)); - - _M_sbuf->sbumpc(); - _M_c = traits_type::eof(); + if (_M_sbuf) + { + _M_sbuf->sbumpc(); + _M_c = traits_type::eof(); + } return *this; } @@ -152,14 +151,16 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION istreambuf_iterator operator++(int) { - __glibcxx_requires_cond(_M_sbuf && - (!_S_is_eof(_M_c) || !_S_is_eof(_M_sbuf->sgetc())), + __glibcxx_requires_cond(!_M_at_eof(), _M_message(__gnu_debug::__msg_inc_istreambuf) ._M_iterator(*this)); istreambuf_iterator __old = *this; - __old._M_c = _M_sbuf->sbumpc(); - _M_c = traits_type::eof(); + if (_M_sbuf) + { + __old._M_c = _M_sbuf->sbumpc(); + _M_c = traits_type::eof(); + } return __old; } @@ -175,21 +176,26 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION int_type _M_get() const { - int_type __ret = _M_c; - if (_M_sbuf && _S_is_eof(__ret) && _S_is_eof(__ret = _M_sbuf->sgetc())) - _M_sbuf = 0; + const int_type __eof = traits_type::eof(); + int_type __ret = __eof; + if (_M_sbuf) + { + if (!traits_type::eq_int_type(_M_c, __eof)) + __ret = _M_c; + else if (!traits_type::eq_int_type((__ret = _M_sbuf->sgetc()), + __eof)) + _M_c = __ret; + else + _M_sbuf = 0; + } return __ret; } bool _M_at_eof() const - { return _S_is_eof(_M_get()); } - - static bool - _S_is_eof(int_type __c) { const int_type __eof = traits_type::eof(); - return traits_type::eq_int_type(__c, __eof); + return traits_type::eq_int_type(_M_get(), __eof); } }; @@ -367,14 +373,13 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION typedef typename __is_iterator_type::traits_type traits_type; typedef typename __is_iterator_type::streambuf_type streambuf_type; typedef typename traits_type::int_type int_type; - const int_type __eof = traits_type::eof(); if (__first._M_sbuf && !__last._M_sbuf) { const int_type __ival = traits_type::to_int_type(__val); streambuf_type* __sb = __first._M_sbuf; int_type __c = __sb->sgetc(); - while (!traits_type::eq_int_type(__c, __eof) + while (!traits_type::eq_int_type(__c, traits_type::eof()) && !traits_type::eq_int_type(__c, __ival)) { streamsize __n = __sb->egptr() - __sb->gptr(); @@ -391,9 +396,11 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION __c = __sb->snextc(); } - __first._M_c = __eof; + if (!traits_type::eq_int_type(__c, traits_type::eof())) + __first._M_c = __c; + else + __first._M_sbuf = 0; } - return __first; } -- 2.10.1