OpenCores
URL https://opencores.org/ocsvn/openrisc/openrisc/trunk

Subversion Repositories openrisc

[/] [openrisc/] [trunk/] [gnu-dev/] [or1k-gcc/] [libstdc++-v3/] [include/] [std/] [istream] - Blame information for rev 742

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 742 jeremybenn
// Input streams -*- C++ -*-
2
 
3
// Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005,
4
// 2006, 2007, 2008, 2009, 2010, 2011
5
// Free Software Foundation, Inc.
6
//
7
// This file is part of the GNU ISO C++ Library.  This library is free
8
// software; you can redistribute it and/or modify it under the
9
// terms of the GNU General Public License as published by the
10
// Free Software Foundation; either version 3, or (at your option)
11
// any later version.
12
 
13
// This library is distributed in the hope that it will be useful,
14
// but WITHOUT ANY WARRANTY; without even the implied warranty of
15
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16
// GNU General Public License for more details.
17
 
18
// Under Section 7 of GPL version 3, you are granted additional
19
// permissions described in the GCC Runtime Library Exception, version
20
// 3.1, as published by the Free Software Foundation.
21
 
22
// You should have received a copy of the GNU General Public License and
23
// a copy of the GCC Runtime Library Exception along with this program;
24
// see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
25
// .
26
 
27
//
28
// ISO C++ 14882: 27.6.1  Input streams
29
//
30
 
31
/** @file include/istream
32
 *  This is a Standard C++ Library header.
33
 */
34
 
35
#ifndef _GLIBCXX_ISTREAM
36
#define _GLIBCXX_ISTREAM 1
37
 
38
#pragma GCC system_header
39
 
40
#include 
41
#include 
42
 
43
namespace std _GLIBCXX_VISIBILITY(default)
44
{
45
_GLIBCXX_BEGIN_NAMESPACE_VERSION
46
 
47
  /**
48
   *  @brief  Template class basic_istream.
49
   *  @ingroup io
50
   *
51
   *  This is the base class for all input streams.  It provides text
52
   *  formatting of all builtin types, and communicates with any class
53
   *  derived from basic_streambuf to do the actual input.
54
  */
55
  template
56
    class basic_istream : virtual public basic_ios<_CharT, _Traits>
57
    {
58
    public:
59
      // Types (inherited from basic_ios (27.4.4)):
60
      typedef _CharT                                    char_type;
61
      typedef typename _Traits::int_type                int_type;
62
      typedef typename _Traits::pos_type                pos_type;
63
      typedef typename _Traits::off_type                off_type;
64
      typedef _Traits                                   traits_type;
65
 
66
      // Non-standard Types:
67
      typedef basic_streambuf<_CharT, _Traits>           __streambuf_type;
68
      typedef basic_ios<_CharT, _Traits>         __ios_type;
69
      typedef basic_istream<_CharT, _Traits>             __istream_type;
70
      typedef num_get<_CharT, istreambuf_iterator<_CharT, _Traits> >
71
                                                        __num_get_type;
72
      typedef ctype<_CharT>                             __ctype_type;
73
 
74
    protected:
75
      // Data Members:
76
      /**
77
       *  The number of characters extracted in the previous unformatted
78
       *  function; see gcount().
79
      */
80
      streamsize                _M_gcount;
81
 
82
    public:
83
      /**
84
       *  @brief  Base constructor.
85
       *
86
       *  This ctor is almost never called by the user directly, rather from
87
       *  derived classes' initialization lists, which pass a pointer to
88
       *  their own stream buffer.
89
      */
90
      explicit
91
      basic_istream(__streambuf_type* __sb)
92
      : _M_gcount(streamsize(0))
93
      { this->init(__sb); }
94
 
95
      /**
96
       *  @brief  Base destructor.
97
       *
98
       *  This does very little apart from providing a virtual base dtor.
99
      */
100
      virtual
101
      ~basic_istream()
102
      { _M_gcount = streamsize(0); }
103
 
104
      /// Safe prefix/suffix operations.
105
      class sentry;
106
      friend class sentry;
107
 
108
      //@{
109
      /**
110
       *  @brief  Interface for manipulators.
111
       *
112
       *  Manipulators such as @c std::ws and @c std::dec use these
113
       *  functions in constructs like
114
       *  std::cin >> std::ws.
115
       *  For more information, see the iomanip header.
116
      */
117
      __istream_type&
118
      operator>>(__istream_type& (*__pf)(__istream_type&))
119
      { return __pf(*this); }
120
 
121
      __istream_type&
122
      operator>>(__ios_type& (*__pf)(__ios_type&))
123
      {
124
        __pf(*this);
125
        return *this;
126
      }
127
 
128
      __istream_type&
129
      operator>>(ios_base& (*__pf)(ios_base&))
130
      {
131
        __pf(*this);
132
        return *this;
133
      }
134
      //@}
135
 
136
      //@{
137
      /**
138
       *  @name Extractors
139
       *
140
       *  All the @c operator>> functions (aka formatted input
141
       *  functions) have some common behavior.  Each starts by
142
       *  constructing a temporary object of type std::basic_istream::sentry
143
       *  with the second argument (noskipws) set to false.  This has several
144
       *  effects, concluding with the setting of a status flag; see the
145
       *  sentry documentation for more.
146
       *
147
       *  If the sentry status is good, the function tries to extract
148
       *  whatever data is appropriate for the type of the argument.
149
       *
150
       *  If an exception is thrown during extraction, ios_base::badbit
151
       *  will be turned on in the stream's error state without causing an
152
       *  ios_base::failure to be thrown.  The original exception will then
153
       *  be rethrown.
154
      */
155
 
156
      //@{
157
      /**
158
       *  @brief  Integer arithmetic extractors
159
       *  @param  __n A variable of builtin integral type.
160
       *  @return  @c *this if successful
161
       *
162
       *  These functions use the stream's current locale (specifically, the
163
       *  @c num_get facet) to parse the input data.
164
      */
165
      __istream_type&
166
      operator>>(bool& __n)
167
      { return _M_extract(__n); }
168
 
169
      __istream_type&
170
      operator>>(short& __n);
171
 
172
      __istream_type&
173
      operator>>(unsigned short& __n)
174
      { return _M_extract(__n); }
175
 
176
      __istream_type&
177
      operator>>(int& __n);
178
 
179
      __istream_type&
180
      operator>>(unsigned int& __n)
181
      { return _M_extract(__n); }
182
 
183
      __istream_type&
184
      operator>>(long& __n)
185
      { return _M_extract(__n); }
186
 
187
      __istream_type&
188
      operator>>(unsigned long& __n)
189
      { return _M_extract(__n); }
190
 
191
#ifdef _GLIBCXX_USE_LONG_LONG
192
      __istream_type&
193
      operator>>(long long& __n)
194
      { return _M_extract(__n); }
195
 
196
      __istream_type&
197
      operator>>(unsigned long long& __n)
198
      { return _M_extract(__n); }
199
#endif
200
      //@}
201
 
202
      //@{
203
      /**
204
       *  @brief  Floating point arithmetic extractors
205
       *  @param  __f A variable of builtin floating point type.
206
       *  @return  @c *this if successful
207
       *
208
       *  These functions use the stream's current locale (specifically, the
209
       *  @c num_get facet) to parse the input data.
210
      */
211
      __istream_type&
212
      operator>>(float& __f)
213
      { return _M_extract(__f); }
214
 
215
      __istream_type&
216
      operator>>(double& __f)
217
      { return _M_extract(__f); }
218
 
219
      __istream_type&
220
      operator>>(long double& __f)
221
      { return _M_extract(__f); }
222
      //@}
223
 
224
      /**
225
       *  @brief  Basic arithmetic extractors
226
       *  @param  __p A variable of pointer type.
227
       *  @return  @c *this if successful
228
       *
229
       *  These functions use the stream's current locale (specifically, the
230
       *  @c num_get facet) to parse the input data.
231
      */
232
      __istream_type&
233
      operator>>(void*& __p)
234
      { return _M_extract(__p); }
235
 
236
      /**
237
       *  @brief  Extracting into another streambuf.
238
       *  @param  __sb  A pointer to a streambuf
239
       *
240
       *  This function behaves like one of the basic arithmetic extractors,
241
       *  in that it also constructs a sentry object and has the same error
242
       *  handling behavior.
243
       *
244
       *  If @p __sb is NULL, the stream will set failbit in its error state.
245
       *
246
       *  Characters are extracted from this stream and inserted into the
247
       *  @p __sb streambuf until one of the following occurs:
248
       *
249
       *  - the input stream reaches end-of-file,
250
       *  - insertion into the output buffer fails (in this case, the
251
       *    character that would have been inserted is not extracted), or
252
       *  - an exception occurs (and in this case is caught)
253
       *
254
       *  If the function inserts no characters, failbit is set.
255
      */
256
      __istream_type&
257
      operator>>(__streambuf_type* __sb);
258
      //@}
259
 
260
      // [27.6.1.3] unformatted input
261
      /**
262
       *  @brief  Character counting
263
       *  @return  The number of characters extracted by the previous
264
       *           unformatted input function dispatched for this stream.
265
      */
266
      streamsize
267
      gcount() const
268
      { return _M_gcount; }
269
 
270
      //@{
271
      /**
272
       *  @name Unformatted Input Functions
273
       *
274
       *  All the unformatted input functions have some common behavior.
275
       *  Each starts by constructing a temporary object of type
276
       *  std::basic_istream::sentry with the second argument (noskipws)
277
       *  set to true.  This has several effects, concluding with the
278
       *  setting of a status flag; see the sentry documentation for more.
279
       *
280
       *  If the sentry status is good, the function tries to extract
281
       *  whatever data is appropriate for the type of the argument.
282
       *
283
       *  The number of characters extracted is stored for later retrieval
284
       *  by gcount().
285
       *
286
       *  If an exception is thrown during extraction, ios_base::badbit
287
       *  will be turned on in the stream's error state without causing an
288
       *  ios_base::failure to be thrown.  The original exception will then
289
       *  be rethrown.
290
      */
291
 
292
      /**
293
       *  @brief  Simple extraction.
294
       *  @return  A character, or eof().
295
       *
296
       *  Tries to extract a character.  If none are available, sets failbit
297
       *  and returns traits::eof().
298
      */
299
      int_type
300
      get();
301
 
302
      /**
303
       *  @brief  Simple extraction.
304
       *  @param  __c  The character in which to store data.
305
       *  @return  *this
306
       *
307
       *  Tries to extract a character and store it in @a __c.  If none are
308
       *  available, sets failbit and returns traits::eof().
309
       *
310
       *  @note  This function is not overloaded on signed char and
311
       *         unsigned char.
312
      */
313
      __istream_type&
314
      get(char_type& __c);
315
 
316
      /**
317
       *  @brief  Simple multiple-character extraction.
318
       *  @param  __s  Pointer to an array.
319
       *  @param  __n  Maximum number of characters to store in @a __s.
320
       *  @param  __delim  A "stop" character.
321
       *  @return  *this
322
       *
323
       *  Characters are extracted and stored into @a __s until one of the
324
       *  following happens:
325
       *
326
       *  - @c __n-1 characters are stored
327
       *  - the input sequence reaches EOF
328
       *  - the next character equals @a __delim, in which case the character
329
       *    is not extracted
330
       *
331
       * If no characters are stored, failbit is set in the stream's error
332
       * state.
333
       *
334
       * In any case, a null character is stored into the next location in
335
       * the array.
336
       *
337
       *  @note  This function is not overloaded on signed char and
338
       *         unsigned char.
339
      */
340
      __istream_type&
341
      get(char_type* __s, streamsize __n, char_type __delim);
342
 
343
      /**
344
       *  @brief  Simple multiple-character extraction.
345
       *  @param  __s  Pointer to an array.
346
       *  @param  __n  Maximum number of characters to store in @a s.
347
       *  @return  *this
348
       *
349
       *  Returns @c get(__s,__n,widen('\\n')).
350
      */
351
      __istream_type&
352
      get(char_type* __s, streamsize __n)
353
      { return this->get(__s, __n, this->widen('\n')); }
354
 
355
      /**
356
       *  @brief  Extraction into another streambuf.
357
       *  @param  __sb  A streambuf in which to store data.
358
       *  @param  __delim  A "stop" character.
359
       *  @return  *this
360
       *
361
       *  Characters are extracted and inserted into @a __sb until one of the
362
       *  following happens:
363
       *
364
       *  - the input sequence reaches EOF
365
       *  - insertion into the output buffer fails (in this case, the
366
       *    character that would have been inserted is not extracted)
367
       *  - the next character equals @a __delim (in this case, the character
368
       *    is not extracted)
369
       *  - an exception occurs (and in this case is caught)
370
       *
371
       * If no characters are stored, failbit is set in the stream's error
372
       * state.
373
      */
374
      __istream_type&
375
      get(__streambuf_type& __sb, char_type __delim);
376
 
377
      /**
378
       *  @brief  Extraction into another streambuf.
379
       *  @param  __sb  A streambuf in which to store data.
380
       *  @return  *this
381
       *
382
       *  Returns @c get(__sb,widen('\\n')).
383
      */
384
      __istream_type&
385
      get(__streambuf_type& __sb)
386
      { return this->get(__sb, this->widen('\n')); }
387
 
388
      /**
389
       *  @brief  String extraction.
390
       *  @param  __s  A character array in which to store the data.
391
       *  @param  __n  Maximum number of characters to extract.
392
       *  @param  __delim  A "stop" character.
393
       *  @return  *this
394
       *
395
       *  Extracts and stores characters into @a __s until one of the
396
       *  following happens.  Note that these criteria are required to be
397
       *  tested in the order listed here, to allow an input line to exactly
398
       *  fill the @a __s array without setting failbit.
399
       *
400
       *  -# the input sequence reaches end-of-file, in which case eofbit
401
       *     is set in the stream error state
402
       *  -# the next character equals @c __delim, in which case the character
403
       *     is extracted (and therefore counted in @c gcount()) but not stored
404
       *  -# @c __n-1 characters are stored, in which case failbit is set
405
       *     in the stream error state
406
       *
407
       *  If no characters are extracted, failbit is set.  (An empty line of
408
       *  input should therefore not cause failbit to be set.)
409
       *
410
       *  In any case, a null character is stored in the next location in
411
       *  the array.
412
      */
413
      __istream_type&
414
      getline(char_type* __s, streamsize __n, char_type __delim);
415
 
416
      /**
417
       *  @brief  String extraction.
418
       *  @param  __s  A character array in which to store the data.
419
       *  @param  __n  Maximum number of characters to extract.
420
       *  @return  *this
421
       *
422
       *  Returns @c getline(__s,__n,widen('\\n')).
423
      */
424
      __istream_type&
425
      getline(char_type* __s, streamsize __n)
426
      { return this->getline(__s, __n, this->widen('\n')); }
427
 
428
      /**
429
       *  @brief  Discarding characters
430
       *  @param  __n  Number of characters to discard.
431
       *  @param  __delim  A "stop" character.
432
       *  @return  *this
433
       *
434
       *  Extracts characters and throws them away until one of the
435
       *  following happens:
436
       *  - if @a __n @c != @c std::numeric_limits::max(), @a __n
437
       *    characters are extracted
438
       *  - the input sequence reaches end-of-file
439
       *  - the next character equals @a __delim (in this case, the character
440
       *    is extracted); note that this condition will never occur if
441
       *    @a __delim equals @c traits::eof().
442
       *
443
       *  NB: Provide three overloads, instead of the single function
444
       *  (with defaults) mandated by the Standard: this leads to a
445
       *  better performing implementation, while still conforming to
446
       *  the Standard.
447
      */
448
      __istream_type&
449
      ignore(streamsize __n, int_type __delim);
450
 
451
      __istream_type&
452
      ignore(streamsize __n);
453
 
454
      __istream_type&
455
      ignore();
456
 
457
      /**
458
       *  @brief  Looking ahead in the stream
459
       *  @return  The next character, or eof().
460
       *
461
       *  If, after constructing the sentry object, @c good() is false,
462
       *  returns @c traits::eof().  Otherwise reads but does not extract
463
       *  the next input character.
464
      */
465
      int_type
466
      peek();
467
 
468
      /**
469
       *  @brief  Extraction without delimiters.
470
       *  @param  __s  A character array.
471
       *  @param  __n  Maximum number of characters to store.
472
       *  @return  *this
473
       *
474
       *  If the stream state is @c good(), extracts characters and stores
475
       *  them into @a __s until one of the following happens:
476
       *  - @a __n characters are stored
477
       *  - the input sequence reaches end-of-file, in which case the error
478
       *    state is set to @c failbit|eofbit.
479
       *
480
       *  @note  This function is not overloaded on signed char and
481
       *         unsigned char.
482
      */
483
      __istream_type&
484
      read(char_type* __s, streamsize __n);
485
 
486
      /**
487
       *  @brief  Extraction until the buffer is exhausted, but no more.
488
       *  @param  __s  A character array.
489
       *  @param  __n  Maximum number of characters to store.
490
       *  @return  The number of characters extracted.
491
       *
492
       *  Extracts characters and stores them into @a __s depending on the
493
       *  number of characters remaining in the streambuf's buffer,
494
       *  @c rdbuf()->in_avail(), called @c A here:
495
       *  - if @c A @c == @c -1, sets eofbit and extracts no characters
496
       *  - if @c A @c == @c 0, extracts no characters
497
       *  - if @c A @c > @c 0, extracts @c min(A,n)
498
       *
499
       *  The goal is to empty the current buffer, and to not request any
500
       *  more from the external input sequence controlled by the streambuf.
501
      */
502
      streamsize
503
      readsome(char_type* __s, streamsize __n);
504
 
505
      /**
506
       *  @brief  Unextracting a single character.
507
       *  @param  __c  The character to push back into the input stream.
508
       *  @return  *this
509
       *
510
       *  If @c rdbuf() is not null, calls @c rdbuf()->sputbackc(c).
511
       *
512
       *  If @c rdbuf() is null or if @c sputbackc() fails, sets badbit in
513
       *  the error state.
514
       *
515
       *  @note  This function first clears eofbit.  Since no characters
516
       *         are extracted, the next call to @c gcount() will return 0,
517
       *         as required by DR 60.
518
      */
519
      __istream_type&
520
      putback(char_type __c);
521
 
522
      /**
523
       *  @brief  Unextracting the previous character.
524
       *  @return  *this
525
       *
526
       *  If @c rdbuf() is not null, calls @c rdbuf()->sungetc(c).
527
       *
528
       *  If @c rdbuf() is null or if @c sungetc() fails, sets badbit in
529
       *  the error state.
530
       *
531
       *  @note  This function first clears eofbit.  Since no characters
532
       *         are extracted, the next call to @c gcount() will return 0,
533
       *         as required by DR 60.
534
      */
535
      __istream_type&
536
      unget();
537
 
538
      /**
539
       *  @brief  Synchronizing the stream buffer.
540
       *  @return  0 on success, -1 on failure
541
       *
542
       *  If @c rdbuf() is a null pointer, returns -1.
543
       *
544
       *  Otherwise, calls @c rdbuf()->pubsync(), and if that returns -1,
545
       *  sets badbit and returns -1.
546
       *
547
       *  Otherwise, returns 0.
548
       *
549
       *  @note  This function does not count the number of characters
550
       *         extracted, if any, and therefore does not affect the next
551
       *         call to @c gcount().
552
      */
553
      int
554
      sync();
555
 
556
      /**
557
       *  @brief  Getting the current read position.
558
       *  @return  A file position object.
559
       *
560
       *  If @c fail() is not false, returns @c pos_type(-1) to indicate
561
       *  failure.  Otherwise returns @c rdbuf()->pubseekoff(0,cur,in).
562
       *
563
       *  @note  This function does not count the number of characters
564
       *         extracted, if any, and therefore does not affect the next
565
       *         call to @c gcount().  At variance with putback, unget and
566
       *         seekg, eofbit is not cleared first.
567
      */
568
      pos_type
569
      tellg();
570
 
571
      /**
572
       *  @brief  Changing the current read position.
573
       *  @param  __pos  A file position object.
574
       *  @return  *this
575
       *
576
       *  If @c fail() is not true, calls @c rdbuf()->pubseekpos(__pos).  If
577
       *  that function fails, sets failbit.
578
       *
579
       *  @note  This function first clears eofbit.  It does not count the
580
       *         number of characters extracted, if any, and therefore does
581
       *         not affect the next call to @c gcount().
582
      */
583
      __istream_type&
584
      seekg(pos_type);
585
 
586
      /**
587
       *  @brief  Changing the current read position.
588
       *  @param  __off  A file offset object.
589
       *  @param  __dir  The direction in which to seek.
590
       *  @return  *this
591
       *
592
       *  If @c fail() is not true, calls @c rdbuf()->pubseekoff(__off,__dir).
593
       *  If that function fails, sets failbit.
594
       *
595
       *  @note  This function first clears eofbit.  It does not count the
596
       *         number of characters extracted, if any, and therefore does
597
       *         not affect the next call to @c gcount().
598
      */
599
      __istream_type&
600
      seekg(off_type, ios_base::seekdir);
601
      //@}
602
 
603
    protected:
604
      basic_istream()
605
      : _M_gcount(streamsize(0))
606
      { this->init(0); }
607
 
608
      template
609
        __istream_type&
610
        _M_extract(_ValueT& __v);
611
    };
612
 
613
  /// Explicit specialization declarations, defined in src/istream.cc.
614
  template<>
615
    basic_istream&
616
    basic_istream::
617
    getline(char_type* __s, streamsize __n, char_type __delim);
618
 
619
  template<>
620
    basic_istream&
621
    basic_istream::
622
    ignore(streamsize __n);
623
 
624
  template<>
625
    basic_istream&
626
    basic_istream::
627
    ignore(streamsize __n, int_type __delim);
628
 
629
#ifdef _GLIBCXX_USE_WCHAR_T
630
  template<>
631
    basic_istream&
632
    basic_istream::
633
    getline(char_type* __s, streamsize __n, char_type __delim);
634
 
635
  template<>
636
    basic_istream&
637
    basic_istream::
638
    ignore(streamsize __n);
639
 
640
  template<>
641
    basic_istream&
642
    basic_istream::
643
    ignore(streamsize __n, int_type __delim);
644
#endif
645
 
646
  /**
647
   *  @brief  Performs setup work for input streams.
648
   *
649
   *  Objects of this class are created before all of the standard
650
   *  extractors are run.  It is responsible for exception-safe
651
   *  prefix and suffix operations, although only prefix actions
652
   *  are currently required by the standard.
653
  */
654
  template
655
    class basic_istream<_CharT, _Traits>::sentry
656
    {
657
      // Data Members.
658
      bool _M_ok;
659
 
660
    public:
661
      /// Easy access to dependant types.
662
      typedef _Traits                                   traits_type;
663
      typedef basic_streambuf<_CharT, _Traits>           __streambuf_type;
664
      typedef basic_istream<_CharT, _Traits>             __istream_type;
665
      typedef typename __istream_type::__ctype_type     __ctype_type;
666
      typedef typename _Traits::int_type                __int_type;
667
 
668
      /**
669
       *  @brief  The constructor performs all the work.
670
       *  @param  __is  The input stream to guard.
671
       *  @param  __noskipws  Whether to consume whitespace or not.
672
       *
673
       *  If the stream state is good (@a __is.good() is true), then the
674
       *  following actions are performed, otherwise the sentry state
675
       *  is false (not okay) and failbit is set in the
676
       *  stream state.
677
       *
678
       *  The sentry's preparatory actions are:
679
       *
680
       *  -# if the stream is tied to an output stream, @c is.tie()->flush()
681
       *     is called to synchronize the output sequence
682
       *  -# if @a __noskipws is false, and @c ios_base::skipws is set in
683
       *     @c is.flags(), the sentry extracts and discards whitespace
684
       *     characters from the stream.  The currently imbued locale is
685
       *     used to determine whether each character is whitespace.
686
       *
687
       *  If the stream state is still good, then the sentry state becomes
688
       *  true (@a okay).
689
      */
690
      explicit
691
      sentry(basic_istream<_CharT, _Traits>& __is, bool __noskipws = false);
692
 
693
      /**
694
       *  @brief  Quick status checking.
695
       *  @return  The sentry state.
696
       *
697
       *  For ease of use, sentries may be converted to booleans.  The
698
       *  return value is that of the sentry state (true == okay).
699
      */
700
#ifdef __GXX_EXPERIMENTAL_CXX0X__
701
      explicit
702
#endif
703
      operator bool() const
704
      { return _M_ok; }
705
    };
706
 
707
  //@{
708
  /**
709
   *  @brief  Character extractors
710
   *  @param  __in  An input stream.
711
   *  @param  __c  A character reference.
712
   *  @return  in
713
   *
714
   *  Behaves like one of the formatted arithmetic extractors described in
715
   *  std::basic_istream.  After constructing a sentry object with good
716
   *  status, this function extracts a character (if one is available) and
717
   *  stores it in @a __c.  Otherwise, sets failbit in the input stream.
718
  */
719
  template
720
    basic_istream<_CharT, _Traits>&
721
    operator>>(basic_istream<_CharT, _Traits>& __in, _CharT& __c);
722
 
723
  template
724
    inline basic_istream&
725
    operator>>(basic_istream& __in, unsigned char& __c)
726
    { return (__in >> reinterpret_cast(__c)); }
727
 
728
  template
729
    inline basic_istream&
730
    operator>>(basic_istream& __in, signed char& __c)
731
    { return (__in >> reinterpret_cast(__c)); }
732
  //@}
733
 
734
  //@{
735
  /**
736
   *  @brief  Character string extractors
737
   *  @param  __in  An input stream.
738
   *  @param  __s  A pointer to a character array.
739
   *  @return  __in
740
   *
741
   *  Behaves like one of the formatted arithmetic extractors described in
742
   *  std::basic_istream.  After constructing a sentry object with good
743
   *  status, this function extracts up to @c n characters and stores them
744
   *  into the array starting at @a __s.  @c n is defined as:
745
   *
746
   *  - if @c width() is greater than zero, @c n is width() otherwise
747
   *  - @c n is the number of elements of the largest array of *
748
   *  - @c char_type that can store a terminating @c eos.
749
   *  - [27.6.1.2.3]/6
750
   *
751
   *  Characters are extracted and stored until one of the following happens:
752
   *  - @c n-1 characters are stored
753
   *  - EOF is reached
754
   *  - the next character is whitespace according to the current locale
755
   *  - the next character is a null byte (i.e., @c charT() )
756
   *
757
   *  @c width(0) is then called for the input stream.
758
   *
759
   *  If no characters are extracted, sets failbit.
760
  */
761
  template
762
    basic_istream<_CharT, _Traits>&
763
    operator>>(basic_istream<_CharT, _Traits>& __in, _CharT* __s);
764
 
765
  // Explicit specialization declaration, defined in src/istream.cc.
766
  template<>
767
    basic_istream&
768
    operator>>(basic_istream& __in, char* __s);
769
 
770
  template
771
    inline basic_istream&
772
    operator>>(basic_istream& __in, unsigned char* __s)
773
    { return (__in >> reinterpret_cast(__s)); }
774
 
775
  template
776
    inline basic_istream&
777
    operator>>(basic_istream& __in, signed char* __s)
778
    { return (__in >> reinterpret_cast(__s)); }
779
  //@}
780
 
781
  /**
782
   *  @brief  Template class basic_iostream
783
   *  @ingroup io
784
   *
785
   *  This class multiply inherits from the input and output stream classes
786
   *  simply to provide a single interface.
787
  */
788
  template
789
    class basic_iostream
790
    : public basic_istream<_CharT, _Traits>,
791
      public basic_ostream<_CharT, _Traits>
792
    {
793
    public:
794
      // _GLIBCXX_RESOLVE_LIB_DEFECTS
795
      // 271. basic_iostream missing typedefs
796
      // Types (inherited):
797
      typedef _CharT                                    char_type;
798
      typedef typename _Traits::int_type                int_type;
799
      typedef typename _Traits::pos_type                pos_type;
800
      typedef typename _Traits::off_type                off_type;
801
      typedef _Traits                                   traits_type;
802
 
803
      // Non-standard Types:
804
      typedef basic_istream<_CharT, _Traits>             __istream_type;
805
      typedef basic_ostream<_CharT, _Traits>             __ostream_type;
806
 
807
      /**
808
       *  @brief  Constructor does nothing.
809
       *
810
       *  Both of the parent classes are initialized with the same
811
       *  streambuf pointer passed to this constructor.
812
      */
813
      explicit
814
      basic_iostream(basic_streambuf<_CharT, _Traits>* __sb)
815
      : __istream_type(__sb), __ostream_type(__sb) { }
816
 
817
      /**
818
       *  @brief  Destructor does nothing.
819
      */
820
      virtual
821
      ~basic_iostream() { }
822
 
823
    protected:
824
      basic_iostream()
825
      : __istream_type(), __ostream_type() { }
826
    };
827
 
828
  /**
829
   *  @brief  Quick and easy way to eat whitespace
830
   *
831
   *  This manipulator extracts whitespace characters, stopping when the
832
   *  next character is non-whitespace, or when the input sequence is empty.
833
   *  If the sequence is empty, @c eofbit is set in the stream, but not
834
   *  @c failbit.
835
   *
836
   *  The current locale is used to distinguish whitespace characters.
837
   *
838
   *  Example:
839
   *  @code
840
   *     MyClass   mc;
841
   *
842
   *     std::cin >> std::ws >> mc;
843
   *  @endcode
844
   *  will skip leading whitespace before calling operator>> on cin and your
845
   *  object.  Note that the same effect can be achieved by creating a
846
   *  std::basic_istream::sentry inside your definition of operator>>.
847
  */
848
  template
849
    basic_istream<_CharT, _Traits>&
850
    ws(basic_istream<_CharT, _Traits>& __is);
851
 
852
#ifdef __GXX_EXPERIMENTAL_CXX0X__
853
  // [27.7.1.6] Rvalue stream extraction
854
  /**
855
   *  @brief  Generic extractor for rvalue stream
856
   *  @param  __is  An input stream.
857
   *  @param  __x  A reference to the extraction target.
858
   *  @return  is
859
   *
860
   *  This is just a forwarding function to allow extraction from
861
   *  rvalue streams since they won't bind to the extractor functions
862
   *  that take an lvalue reference.
863
  */
864
  template
865
    inline basic_istream<_CharT, _Traits>&
866
    operator>>(basic_istream<_CharT, _Traits>&& __is, _Tp& __x)
867
    { return (__is >> __x); }
868
#endif // __GXX_EXPERIMENTAL_CXX0X__
869
 
870
_GLIBCXX_END_NAMESPACE_VERSION
871
} // namespace
872
 
873
#include 
874
 
875
#endif  /* _GLIBCXX_ISTREAM */

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.