forked from boostorg/conversion
Fix streams and buffers usage (refs #8267 and refs #7704). Now conversions the use STL streams shall work faster
[SVN r83642]
This commit is contained in:
@@ -1526,13 +1526,12 @@ namespace boost {
|
||||
|
||||
#if defined(BOOST_NO_STRINGSTREAM)
|
||||
typedef std::ostrstream out_stream_t;
|
||||
typedef parser_buf<std::strstreambuf, char> unlocked_but_t;
|
||||
#elif defined(BOOST_NO_STD_LOCALE)
|
||||
typedef std::ostringstream out_stream_t;
|
||||
typedef parser_buf<std::stringbuf, char> unlocked_but_t;
|
||||
typedef parser_buf<std::streambuf, char> buffer_t;
|
||||
#else
|
||||
typedef std::basic_ostringstream<CharT, Traits> out_stream_t;
|
||||
typedef parser_buf<std::basic_stringbuf<CharT, Traits>, CharT> unlocked_but_t;
|
||||
typedef parser_buf<std::basic_streambuf<CharT, Traits>, CharT> buffer_t;
|
||||
#endif
|
||||
typedef BOOST_DEDUCED_TYPENAME boost::mpl::if_c<
|
||||
RequiresStringbuffer,
|
||||
@@ -1615,8 +1614,9 @@ namespace boost {
|
||||
BOOST_STATIC_ASSERT((boost::is_same<char, CharT>::value));
|
||||
#endif
|
||||
bool const result = !(out_stream << input).fail();
|
||||
const unlocked_but_t* const p
|
||||
= static_cast<unlocked_but_t*>(out_stream.rdbuf()) ;
|
||||
const buffer_t* const p = static_cast<buffer_t*>(
|
||||
static_cast<std::basic_streambuf<CharT, Traits>*>(out_stream.rdbuf())
|
||||
);
|
||||
start = p->pbase();
|
||||
finish = p->pptr();
|
||||
return result;
|
||||
@@ -1984,15 +1984,13 @@ namespace boost {
|
||||
std::istrstream stream(start, finish - start);
|
||||
#else
|
||||
|
||||
#if defined(BOOST_NO_STD_LOCALE)
|
||||
std::istringstream stream;
|
||||
#else
|
||||
std::basic_istringstream<CharT, Traits> stream;
|
||||
#endif // BOOST_NO_STD_LOCALE
|
||||
|
||||
unlocked_but_t buf;
|
||||
buffer_t buf;
|
||||
buf.setbuf(start, finish - start);
|
||||
dynamic_cast<std::basic_ios<CharT, Traits>&>(stream).rdbuf(&buf);
|
||||
#if defined(BOOST_NO_STD_LOCALE)
|
||||
std::istream stream(&buf);
|
||||
#else
|
||||
std::basic_istream<CharT, Traits> stream(&buf);
|
||||
#endif // BOOST_NO_STD_LOCALE
|
||||
#endif // BOOST_NO_STRINGSTREAM
|
||||
|
||||
stream.unsetf(std::ios::skipws);
|
||||
|
Reference in New Issue
Block a user