6 #ifndef TURI_STRING_STREAM_INTERNALS_H_ 7 #define TURI_STRING_STREAM_INTERNALS_H_ 13 namespace turi {
namespace gl_string_internals {
15 template<
class _Traits>
16 std::basic_istream<char, _Traits>& stream_in(std::basic_istream<char, _Traits>& is, gl_string& str) {
21 typename basic_istream<char, _Traits>::sentry sen(is);
25 streamsize n = is.width();
29 n = numeric_limits<streamsize>::max();
31 const ctype<char>& ct = use_facet<ctype<char> >(is.getloc());
32 ios_base::iostate err = ios_base::goodbit;
35 typename _Traits::int_type i = is.rdbuf()->sgetc();
36 if (_Traits::eq_int_type(i, _Traits::eof()))
38 err |= ios_base::eofbit;
41 char ch = _Traits::to_char_type(i);
42 if (ct.is(ct.space, ch))
50 err |= ios_base::failbit;
54 is.setstate(ios_base::failbit);
58 is.setstate(ios_base::badbit);
63 template <
class _Traits>
64 std::basic_istream<char, _Traits>&
65 getline(std::basic_istream<char, _Traits>& is, gl_string& str,
char dlm) {
69 typename basic_istream<char, _Traits>::sentry sen(is,
true);
72 ios_base::iostate err = ios_base::goodbit;
75 typename _Traits::int_type i = is.rdbuf()->sbumpc();
76 if (_Traits::eq_int_type(i, _Traits::eof())) {
77 err |= ios_base::eofbit;
81 char ch = _Traits::to_char_type(i);
82 if (_Traits::eq(ch, dlm))
85 if (str.size() == str.max_size()) {
86 err |= ios_base::failbit;
91 err |= ios_base::failbit;
95 is.setstate(ios_base::badbit);