[cfe-commits] [libcxx] r168209 - /libcxx/trunk/include/iterator
Howard Hinnant
hhinnant at apple.com
Fri Nov 16 14:17:24 PST 2012
Author: hhinnant
Date: Fri Nov 16 16:17:23 2012
New Revision: 168209
URL: http://llvm.org/viewvc/llvm-project?rev=168209&view=rev
Log:
istreambuf_iterator increment should call sbumpc instead of snextc. Patch
by Kimball Thurston. This fixes http://llvm.org/bugs/show_bug.cgi?id=14358.
Modified:
libcxx/trunk/include/iterator
Modified: libcxx/trunk/include/iterator
URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/include/iterator?rev=168209&r1=168208&r2=168209&view=diff
==============================================================================
--- libcxx/trunk/include/iterator (original)
+++ libcxx/trunk/include/iterator Fri Nov 16 16:17:23 2012
@@ -799,7 +799,7 @@
typedef basic_streambuf<_CharT,_Traits> streambuf_type;
typedef basic_istream<_CharT,_Traits> istream_type;
private:
- streambuf_type* __sbuf_;
+ mutable streambuf_type* __sbuf_;
class __proxy
{
@@ -813,13 +813,14 @@
};
_LIBCPP_INLINE_VISIBILITY
- void __test_for_eof()
+ bool __test_for_eof() const
{
if (__sbuf_ && traits_type::eq_int_type(__sbuf_->sgetc(), traits_type::eof()))
__sbuf_ = 0;
+ return __sbuf_ == 0;
}
public:
- _LIBCPP_INLINE_VISIBILITY istreambuf_iterator() _NOEXCEPT : __sbuf_(0) {}
+ _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR istreambuf_iterator() _NOEXCEPT : __sbuf_(0) {}
_LIBCPP_INLINE_VISIBILITY istreambuf_iterator(istream_type& __s) _NOEXCEPT
: __sbuf_(__s.rdbuf()) {__test_for_eof();}
_LIBCPP_INLINE_VISIBILITY istreambuf_iterator(streambuf_type* __s) _NOEXCEPT
@@ -832,19 +833,16 @@
_LIBCPP_INLINE_VISIBILITY char_type* operator->() const {return nullptr;}
_LIBCPP_INLINE_VISIBILITY istreambuf_iterator& operator++()
{
- if (traits_type::eq_int_type(__sbuf_->snextc(), traits_type::eof()))
- __sbuf_ = 0;
+ __sbuf_->sbumpc();
return *this;
}
_LIBCPP_INLINE_VISIBILITY __proxy operator++(int)
{
- char_type __c = __sbuf_->sgetc();
- ++(*this);
- return __proxy(__c, __sbuf_);
+ return __proxy(__sbuf_->sbumpc(), __sbuf_);
}
_LIBCPP_INLINE_VISIBILITY bool equal(const istreambuf_iterator& __b) const
- {return (__sbuf_ == 0) == (__b.__sbuf_ == 0);}
+ {return __test_for_eof() == __b.__test_for_eof();}
};
template <class _CharT, class _Traits>
More information about the cfe-commits
mailing list