mirror of
https://github.com/intel/llvm.git
synced 2026-01-20 10:58:11 +08:00
[libc++] reduce <complex> parsing time
Instead of including <ios> for ios_base::failbit, simply get failbit
member of the template argument. Print directly to a stream instead
of using intermediate ostringstream.
Parsing time: 874ms -> 164ms (-81%)
Thanks to Nikita Kniazev for the patch!
Differential Revision: https://reviews.llvm.org/D71214
This commit is contained in:
@@ -243,7 +243,7 @@ template<class T, class charT, class traits>
|
||||
#include <type_traits>
|
||||
#include <stdexcept>
|
||||
#include <cmath>
|
||||
#include <sstream>
|
||||
#include <iosfwd>
|
||||
#include <version>
|
||||
|
||||
#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
|
||||
@@ -1406,10 +1406,10 @@ operator>>(basic_istream<_CharT, _Traits>& __is, complex<_Tp>& __x)
|
||||
__x = complex<_Tp>(__r, __i);
|
||||
}
|
||||
else
|
||||
__is.setstate(ios_base::failbit);
|
||||
__is.setstate(__is.failbit);
|
||||
}
|
||||
else
|
||||
__is.setstate(ios_base::failbit);
|
||||
__is.setstate(__is.failbit);
|
||||
}
|
||||
else if (__c == _CharT(')'))
|
||||
{
|
||||
@@ -1417,10 +1417,10 @@ operator>>(basic_istream<_CharT, _Traits>& __is, complex<_Tp>& __x)
|
||||
__x = complex<_Tp>(__r, _Tp(0));
|
||||
}
|
||||
else
|
||||
__is.setstate(ios_base::failbit);
|
||||
__is.setstate(__is.failbit);
|
||||
}
|
||||
else
|
||||
__is.setstate(ios_base::failbit);
|
||||
__is.setstate(__is.failbit);
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -1429,11 +1429,11 @@ operator>>(basic_istream<_CharT, _Traits>& __is, complex<_Tp>& __x)
|
||||
if (!__is.fail())
|
||||
__x = complex<_Tp>(__r, _Tp(0));
|
||||
else
|
||||
__is.setstate(ios_base::failbit);
|
||||
__is.setstate(__is.failbit);
|
||||
}
|
||||
}
|
||||
else
|
||||
__is.setstate(ios_base::failbit);
|
||||
__is.setstate(__is.failbit);
|
||||
return __is;
|
||||
}
|
||||
|
||||
@@ -1441,12 +1441,7 @@ template<class _Tp, class _CharT, class _Traits>
|
||||
basic_ostream<_CharT, _Traits>&
|
||||
operator<<(basic_ostream<_CharT, _Traits>& __os, const complex<_Tp>& __x)
|
||||
{
|
||||
basic_ostringstream<_CharT, _Traits> __s;
|
||||
__s.flags(__os.flags());
|
||||
__s.imbue(__os.getloc());
|
||||
__s.precision(__os.precision());
|
||||
__s << '(' << __x.real() << ',' << __x.imag() << ')';
|
||||
return __os << __s.str();
|
||||
return __os << '(' << __x.real() << ',' << __x.imag() << ')';
|
||||
}
|
||||
|
||||
#if _LIBCPP_STD_VER > 11
|
||||
|
||||
Reference in New Issue
Block a user