34template<
class _CharT,
class _Traits,
class _Allocator>
35basic_istream<_CharT, _Traits>&
36operator>> (basic_istream<_CharT, _Traits>& __is,
37 basic_string<_CharT, _Traits, _Allocator>& __str)
41 const typename basic_istream<_CharT, _Traits>::sentry
44 ios_base::iostate __err = ios_base::goodbit;
46 typedef _RWSTD_SIZE_T _SizeT;
59 __is.width () ? __is.width () : __str.max_size ();
61 basic_streambuf<_CharT, _Traits>*
const __rdbuf = __is.rdbuf ();
63 const ctype<_CharT> &__ctp =
66#ifndef _RWSTD_NO_FRIEND_TEMPLATE
70 const _CharT*
const __gptr = __rdbuf->gptr ();
71 const _CharT*
const __egptr = __rdbuf->egptr ();
74 _SizeT __navail = __egptr - __gptr;
82 const _CharT* __pdel = __gptr;
83 for (; __pdel != __egptr; ++__pdel) {
85 const typename _Traits::int_type
86 __c = _Traits::to_int_type(*__pdel);
88 if (_Traits::eq_int_type (__c, _Traits::eof ())) {
89 __err = ios_base::eofbit;
93 if (__ctp.is (__ctp.space, *__pdel))
100 if (__pdel == __egptr) {
105 __navail = __pdel - __gptr + 1;
108 else if (__n == __navail)
114 __str.append (__gptr, __navail - !!__pdel);
116 __gcount += __navail;
120 __rdbuf->gbump (__navail);
128 if (2 > __n && _SizeT (__egptr - __gptr) != __navail) {
129 __err = ios_base::failbit;
137 const typename _Traits::int_type
138 __c = __rdbuf->sgetc ();
140 if (_Traits::eq_int_type (__c, _Traits::eof ())) {
141 __err = ios_base::eofbit;
146 const typename _Traits::char_type
147 __ch = _Traits::to_char_type (__c);
149 if (__ctp.is (__ctp.space, __ch))
152 __str.push_back (__ch);
167 for ( ; __n != 0; ) {
169 const typename _Traits::int_type
170 __c (__rdbuf->sgetc ());
172 if (_Traits::eq_int_type (__c, _Traits::eof ())) {
173 __err = ios_base::eofbit;
178 const typename _Traits::char_type
179 __ch = _Traits::to_char_type (__c);
181 if (__ctp.is (__ctp.space, __ch))
184 __str.push_back (__ch);
202 __is.setstate (ios_base::badbit | _RW::__rw_rethrow);
206 __err |= ios_base::failbit;
209 __is.setstate (__err);
216template<
class _CharT,
class _Traits,
class _Allocator>
217basic_istream<_CharT, _Traits>&
218getline (basic_istream<_CharT, _Traits>& __is,
219 basic_string<_CharT, _Traits, _Allocator>& __str,
224 const typename basic_istream<_CharT, _Traits>::sentry
225 __ipfx (__is,
true );
227#ifndef _RWSTD_NO_FRIEND_TEMPLATE
229 ios_base::iostate __err = ios_base::goodbit;
231 typedef _RWSTD_SIZE_T _SizeT;
240 _SizeT __n = __str.max_size ();
241 if (__n + _SizeT (1))
244 basic_streambuf<_CharT, _Traits>*
const __rdbuf = __is.rdbuf ();
250 typedef typename _Traits::int_type int_type;
252 const _CharT*
const __gptr = __rdbuf->gptr ();
253 const _CharT*
const __egptr = __rdbuf->egptr ();
257 _SizeT __navail = __egptr - __gptr;
264 const _CharT*
const __pdel =
265 _Traits::find (__gptr, __navail, __delim);
268 __navail = __pdel - __gptr + 1;
271 else if (__n == __navail)
277 __str.append (__gptr, __navail - !!__pdel);
279 __gcount += __navail;
283 __rdbuf->gbump (__navail);
289 if (2 > __n && _SizeT (__egptr - __gptr) != __navail) {
290 __err = ios_base::failbit;
298 const int_type __c (__rdbuf->sgetc ());
300 if (_Traits::eq_int_type (__c, _Traits::eof ())) {
301 __err = ios_base::eofbit;
305 const _CharT __ch = _Traits::to_char_type (__c);
306 if (_Traits::eq (__ch, __delim)) {
313 __err = ios_base::failbit;
331 __is.setstate (ios_base::badbit | _RW::__rw_rethrow);
336 __err |= ios_base::failbit;
340 ios_base::iostate __err = ios_base::failbit;
348 const _RWSTD_SIZE_T __max_size = __str.max_size ();
358 const typename _Traits::int_type
359 __c (__is.rdbuf ()->sgetc ());
361 if (_Traits::eq_int_type (__c, _Traits::eof ())) {
364 __err = ios_base::eofbit;
366 __err = ios_base::eofbit | ios_base::failbit;
371 if (_Traits::eq (_Traits::to_char_type (__c), __delim)) {
372 __is.rdbuf ()->sbumpc ();
373 __err = ios_base::goodbit;
377 if (__max_size <= __str.size ())
380 __str.push_back (_Traits::to_char_type (__c));
382 __is.rdbuf ()->sbumpc ();
386 __is.setstate (ios_base::badbit | _RW::__rw_rethrow);
393 __is.setstate (__err);
#define _RWSTD_NAMESPACE(name)
#define _USE_FACET(type, arg)
#define _RWSTD_ASSERT(ignore)