00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
#ifndef _CPP_BITS_IOSBASE_H
00041
#define _CPP_BITS_IOSBASE_H 1
00042
00043
#pragma GCC system_header
00044
00045
#include <bits/atomicity.h>
00046
#include <bits/localefwd.h>
00047
#include <bits/locale_classes.h>
00048
00049
namespace std
00050 {
00051
00052
00053
00054
00055
enum _Ios_Fmtflags { _M_ios_fmtflags_end = 1L << 16 };
00056
00057
inline _Ios_Fmtflags
00058
operator&(_Ios_Fmtflags __a, _Ios_Fmtflags __b)
00059 {
return _Ios_Fmtflags(static_cast<int>(__a) & static_cast<int>(__b)); }
00060
00061
inline _Ios_Fmtflags
00062
operator|(_Ios_Fmtflags __a, _Ios_Fmtflags __b)
00063 {
return _Ios_Fmtflags(static_cast<int>(__a) | static_cast<int>(__b)); }
00064
00065
inline _Ios_Fmtflags
00066
operator^(_Ios_Fmtflags __a, _Ios_Fmtflags __b)
00067 {
return _Ios_Fmtflags(static_cast<int>(__a) ^ static_cast<int>(__b)); }
00068
00069
inline _Ios_Fmtflags
00070 operator|=(_Ios_Fmtflags& __a, _Ios_Fmtflags __b)
00071 {
return __a = __a | __b; }
00072
00073
inline _Ios_Fmtflags
00074 operator&=(_Ios_Fmtflags& __a, _Ios_Fmtflags __b)
00075 {
return __a = __a & __b; }
00076
00077
inline _Ios_Fmtflags
00078 operator^=(_Ios_Fmtflags& __a, _Ios_Fmtflags __b)
00079 {
return __a = __a ^ __b; }
00080
00081
inline _Ios_Fmtflags
00082 operator~(_Ios_Fmtflags __a)
00083 {
return _Ios_Fmtflags(~static_cast<int>(__a)); }
00084
00085
00086
enum _Ios_Openmode { _M_ios_openmode_end = 1L << 16 };
00087
00088
inline _Ios_Openmode
00089
operator&(_Ios_Openmode __a, _Ios_Openmode __b)
00090 {
return _Ios_Openmode(static_cast<int>(__a) & static_cast<int>(__b)); }
00091
00092
inline _Ios_Openmode
00093
operator|(_Ios_Openmode __a, _Ios_Openmode __b)
00094 {
return _Ios_Openmode(static_cast<int>(__a) | static_cast<int>(__b)); }
00095
00096
inline _Ios_Openmode
00097
operator^(_Ios_Openmode __a, _Ios_Openmode __b)
00098 {
return _Ios_Openmode(static_cast<int>(__a) ^ static_cast<int>(__b)); }
00099
00100
inline _Ios_Openmode
00101 operator|=(_Ios_Openmode& __a, _Ios_Openmode __b)
00102 {
return __a = __a | __b; }
00103
00104
inline _Ios_Openmode
00105 operator&=(_Ios_Openmode& __a, _Ios_Openmode __b)
00106 {
return __a = __a & __b; }
00107
00108
inline _Ios_Openmode
00109 operator^=(_Ios_Openmode& __a, _Ios_Openmode __b)
00110 {
return __a = __a ^ __b; }
00111
00112
inline _Ios_Openmode
00113 operator~(_Ios_Openmode __a)
00114 {
return _Ios_Openmode(~static_cast<int>(__a)); }
00115
00116
00117
enum _Ios_Iostate { _M_ios_iostate_end = 1L << 16 };
00118
00119
inline _Ios_Iostate
00120
operator&(_Ios_Iostate __a, _Ios_Iostate __b)
00121 {
return _Ios_Iostate(static_cast<int>(__a) & static_cast<int>(__b)); }
00122
00123
inline _Ios_Iostate
00124
operator|(_Ios_Iostate __a, _Ios_Iostate __b)
00125 {
return _Ios_Iostate(static_cast<int>(__a) | static_cast<int>(__b)); }
00126
00127
inline _Ios_Iostate
00128
operator^(_Ios_Iostate __a, _Ios_Iostate __b)
00129 {
return _Ios_Iostate(static_cast<int>(__a) ^ static_cast<int>(__b)); }
00130
00131
inline _Ios_Iostate
00132 operator|=(_Ios_Iostate& __a, _Ios_Iostate __b)
00133 {
return __a = __a | __b; }
00134
00135
inline _Ios_Iostate
00136 operator&=(_Ios_Iostate& __a, _Ios_Iostate __b)
00137 {
return __a = __a & __b; }
00138
00139
inline _Ios_Iostate
00140 operator^=(_Ios_Iostate& __a, _Ios_Iostate __b)
00141 {
return __a = __a ^ __b; }
00142
00143
inline _Ios_Iostate
00144 operator~(_Ios_Iostate __a)
00145 {
return _Ios_Iostate(~static_cast<int>(__a)); }
00146
00147
enum _Ios_Seekdir { _M_ios_seekdir_end = 1L << 16 };
00148
00149
00150
00151
00152
00153
00154
00155
00156
00157
00158 class ios_base
00159 {
00160
public:
00161
00162
00163
00164 class failure :
public exception
00165 {
00166
public:
00167
#ifdef _GLIBCPP_RESOLVE_LIB_DEFECTS
00168
00169
explicit
00170
failure(
const string& __str)
throw();
00171
00172
00173
00174
virtual
00175 ~
failure()
throw();
00176
00177
virtual const char*
00178
what()
const throw();
00179
00180
private:
00181
enum { _M_bufsize = 256 };
00182
char _M_name[_M_bufsize];
00183
#endif
00184
};
00185
00186
00187
00188
00189
00190
00191
00192
00193
00194
00195
00196
00197
00198
00199
00200
00201
00202
00203
00204
00205
00206
00207
00208
00209
00210
00211
00212 typedef _Ios_Fmtflags
fmtflags;
00213
00214
static const fmtflags boolalpha =
fmtflags(__ios_flags::_S_boolalpha);
00215
00216
static const fmtflags dec =
fmtflags(__ios_flags::_S_dec);
00217
00218
static const fmtflags fixed =
fmtflags(__ios_flags::_S_fixed);
00219
00220
static const fmtflags hex =
fmtflags(__ios_flags::_S_hex);
00221
00222
00223
00224
static const fmtflags internal =
fmtflags(__ios_flags::_S_internal);
00225
00226
00227
static const fmtflags left =
fmtflags(__ios_flags::_S_left);
00228
00229
static const fmtflags oct =
fmtflags(__ios_flags::_S_oct);
00230
00231
00232
static const fmtflags right =
fmtflags(__ios_flags::_S_right);
00233
00234
static const fmtflags scientific =
fmtflags(__ios_flags::_S_scientific);
00235
00236
00237
static const fmtflags showbase =
fmtflags(__ios_flags::_S_showbase);
00238
00239
00240
static const fmtflags showpoint =
fmtflags(__ios_flags::_S_showpoint);
00241
00242
static const fmtflags showpos =
fmtflags(__ios_flags::_S_showpos);
00243
00244
static const fmtflags skipws =
fmtflags(__ios_flags::_S_skipws);
00245
00246
static const fmtflags unitbuf =
fmtflags(__ios_flags::_S_unitbuf);
00247
00248
00249
static const fmtflags uppercase =
fmtflags(__ios_flags::_S_uppercase);
00250
00251
static const fmtflags adjustfield =
fmtflags(__ios_flags::_S_adjustfield);
00252
00253
static const fmtflags basefield =
fmtflags(__ios_flags::_S_basefield);
00254
00255
static const fmtflags floatfield =
fmtflags(__ios_flags::_S_floatfield);
00256
00257
00258
00259
00260
00261
00262
00263
00264
00265
00266
00267
00268
00269 typedef _Ios_Iostate
iostate;
00270
00271
00272
static const iostate badbit =
iostate(__ios_flags::_S_badbit);
00273
00274
static const iostate eofbit =
iostate(__ios_flags::_S_eofbit);
00275
00276
00277
00278
static const iostate failbit =
iostate(__ios_flags::_S_failbit);
00279
00280
static const iostate goodbit =
iostate(0);
00281
00282
00283
00284
00285
00286
00287
00288
00289
00290
00291
00292
00293
00294
00295
00296 typedef _Ios_Openmode
openmode;
00297
00298
static const openmode app =
openmode(__ios_flags::_S_app);
00299
00300
static const openmode ate =
openmode(__ios_flags::_S_ate);
00301
00302
00303
00304
00305
static const openmode binary =
openmode(__ios_flags::_S_bin);
00306
00307
static const openmode in =
openmode(__ios_flags::_S_in);
00308
00309
static const openmode out =
openmode(__ios_flags::_S_out);
00310
00311
static const openmode trunc =
openmode(__ios_flags::_S_trunc);
00312
00313
00314
00315
00316
00317
00318
00319
00320
00321
00322
00323 typedef _Ios_Seekdir
seekdir;
00324
00325
static const seekdir beg =
seekdir(0);
00326
00327
static const seekdir cur =
seekdir(SEEK_CUR);
00328
00329
static const seekdir end =
seekdir(SEEK_END);
00330
00331
#ifdef _GLIBCPP_DEPRECATED
00332
00333
typedef int io_state;
00334
typedef int open_mode;
00335
typedef int seek_dir;
00336
00337
typedef std::streampos streampos;
00338
typedef std::streamoff streamoff;
00339
#endif
00340
00341
00342
00343
00344
00345
enum event
00346 {
00347 erase_event,
00348 imbue_event,
00349 copyfmt_event
00350 };
00351
00352
00353
00354
00355
typedef void (*event_callback) (event,
ios_base&,
int);
00356
00357
00358
00359
00360
void
00361
register_callback(
event_callback __fn,
int __index);
00362
00363
protected:
00364
00365
00366
00367
00368
00369
00370 streamsize _M_precision;
00371 streamsize _M_width;
00372
fmtflags _M_flags;
00373
iostate _M_exception;
00374
iostate _M_streambuf_state;
00375
00376
00377
00378
00379
struct _Callback_list
00380 {
00381
00382 _Callback_list* _M_next;
00383
ios_base::event_callback _M_fn;
00384
int _M_index;
00385 _Atomic_word _M_refcount;
00386
00387 _Callback_list(
ios_base::event_callback __fn,
int __index,
00388 _Callback_list* __cb)
00389 : _M_next(__cb), _M_fn(__fn), _M_index(__index), _M_refcount(0) { }
00390
00391
void
00392 _M_add_reference() { __atomic_add(&_M_refcount, 1); }
00393
00394
00395
int
00396 _M_remove_reference() {
return __exchange_and_add(&_M_refcount, -1); }
00397 };
00398
00399 _Callback_list* _M_callbacks;
00400
00401
void
00402 _M_call_callbacks(event __ev)
throw();
00403
00404
void
00405 _M_dispose_callbacks(
void);
00406
00407
00408
struct _Words
00409 {
00410
void* _M_pword;
00411
long _M_iword;
00412 _Words() : _M_pword(0), _M_iword(0) { }
00413 };
00414
00415
00416 _Words _M_word_zero;
00417
00418
00419
00420
static const int _S_local_word_size = 8;
00421 _Words _M_local_word[_S_local_word_size];
00422
00423
00424
int _M_word_size;
00425 _Words* _M_word;
00426
00427 _Words&
00428 _M_grow_words(
int __index);
00429
00430
00431 locale _M_ios_locale;
00432
00433
void
00434 _M_init();
00435
00436
public:
00437
00438
00439
00440
00441
00442
class Init
00443 {
00444
friend class ios_base;
00445
public:
00446 Init();
00447 ~Init();
00448
00449
static void
00450 _S_ios_create(
bool __sync);
00451
00452
static void
00453 _S_ios_destroy();
00454
00455
00456
00457
00458
static bool
00459 _S_initialized() {
return _S_ios_base_init; }
00460
00461
private:
00462
static int _S_ios_base_init;
00463
static bool _S_synced_with_stdio;
00464 };
00465
00466
00467
00468
00469
00470
00471
inline fmtflags
00472
flags()
const {
return _M_flags; }
00473
00474
00475
00476
00477
00478
00479
00480
00481
inline fmtflags
00482
flags(
fmtflags __fmtfl)
00483 {
00484
fmtflags __old = _M_flags;
00485 _M_flags = __fmtfl;
00486
return __old;
00487 }
00488
00489
00490
00491
00492
00493
00494
00495
00496
00497
inline fmtflags
00498
setf(fmtflags __fmtfl)
00499 {
00500 fmtflags __old = _M_flags;
00501 _M_flags |= __fmtfl;
00502
return __old;
00503 }
00504
00505
00506
00507
00508
00509
00510
00511
00512
00513
00514
inline fmtflags
00515
setf(fmtflags __fmtfl, fmtflags __mask)
00516 {
00517 fmtflags __old = _M_flags;
00518 _M_flags &= ~__mask;
00519 _M_flags |= (__fmtfl & __mask);
00520
return __old;
00521 }
00522
00523
00524
00525
00526
00527
00528
00529
inline void
00530
unsetf(fmtflags __mask) { _M_flags &= ~__mask; }
00531
00532
00533
00534
00535
00536
00537
00538
00539
00540
00541
inline streamsize
00542
precision()
const {
return _M_precision; }
00543
00544
00545
00546
00547
00548
00549
inline streamsize
00550
precision(streamsize __prec)
00551 {
00552 streamsize __old = _M_precision;
00553 _M_precision = __prec;
00554
return __old;
00555 }
00556
00557
00558
00559
00560
00561
00562
00563
inline streamsize
00564
width()
const {
return _M_width; }
00565
00566
00567
00568
00569
00570
00571
inline streamsize
00572
width(streamsize __wide)
00573 {
00574 streamsize __old = _M_width;
00575 _M_width = __wide;
00576
return __old;
00577 }
00578
00579
00580
00581
00582
00583
00584
00585
00586
00587
00588
00589
00590
static bool
00591
sync_with_stdio(
bool __sync =
true);
00592
00593
00594
00595
00596
00597
00598
00599
00600
00601
00602 locale
00603
imbue(
const locale& __loc);
00604
00605
00606
00607
00608
00609
00610
00611
00612
00613
inline locale
00614
getloc()
const {
return _M_ios_locale; }
00615
00616
00617
00618
00619
00620
00621
00622
00623
inline const locale&
00624 _M_getloc()
const {
return _M_ios_locale; }
00625
00626
00627
00628
00629
00630
static int
00631
xalloc() throw();
00632
00633
00634
00635
00636 inline
long&
00637 iword(
int __ix)
00638 {
00639 _Words& __word = (__ix < _M_word_size)
00640 ? _M_word[__ix] : _M_grow_words(__ix);
00641
return __word._M_iword;
00642 }
00643
00644
00645
00646
00647
inline void*&
00648
pword(
int __ix)
00649 {
00650 _Words& __word = (__ix < _M_word_size)
00651 ? _M_word[__ix] : _M_grow_words(__ix);
00652
return __word._M_pword;
00653 }
00654
00655
00656
00657
00658
00659
00660
~ios_base();
00661
00662
protected:
00663
ios_base();
00664
00665
#ifdef _GLIBCPP_RESOLVE_LIB_DEFECTS
00666
00667
private:
00668
ios_base(
const ios_base&);
00669
00670
ios_base&
00671 operator=(
const ios_base&);
00672
#endif
00673
};
00674
00675
00676
00677
inline ios_base&
00678
boolalpha(
ios_base& __base)
00679 {
00680 __base.
setf(ios_base::boolalpha);
00681
return __base;
00682 }
00683
00684
00685
inline ios_base&
00686
noboolalpha(
ios_base& __base)
00687 {
00688 __base.
unsetf(ios_base::boolalpha);
00689
return __base;
00690 }
00691
00692
00693
inline ios_base&
00694
showbase(
ios_base& __base)
00695 {
00696 __base.
setf(ios_base::showbase);
00697
return __base;
00698 }
00699
00700
00701
inline ios_base&
00702
noshowbase(
ios_base& __base)
00703 {
00704 __base.
unsetf(ios_base::showbase);
00705
return __base;
00706 }
00707
00708
00709
inline ios_base&
00710
showpoint(
ios_base& __base)
00711 {
00712 __base.
setf(ios_base::showpoint);
00713
return __base;
00714 }
00715
00716
00717
inline ios_base&
00718
noshowpoint(
ios_base& __base)
00719 {
00720 __base.
unsetf(ios_base::showpoint);
00721
return __base;
00722 }
00723
00724
00725
inline ios_base&
00726
showpos(
ios_base& __base)
00727 {
00728 __base.
setf(ios_base::showpos);
00729
return __base;
00730 }
00731
00732
00733
inline ios_base&
00734
noshowpos(
ios_base& __base)
00735 {
00736 __base.
unsetf(ios_base::showpos);
00737
return __base;
00738 }
00739
00740
00741
inline ios_base&
00742
skipws(
ios_base& __base)
00743 {
00744 __base.
setf(ios_base::skipws);
00745
return __base;
00746 }
00747
00748
00749
inline ios_base&
00750
noskipws(
ios_base& __base)
00751 {
00752 __base.
unsetf(ios_base::skipws);
00753
return __base;
00754 }
00755
00756
00757
inline ios_base&
00758
uppercase(
ios_base& __base)
00759 {
00760 __base.
setf(ios_base::uppercase);
00761
return __base;
00762 }
00763
00764
00765
inline ios_base&
00766
nouppercase(
ios_base& __base)
00767 {
00768 __base.
unsetf(ios_base::uppercase);
00769
return __base;
00770 }
00771
00772
00773
inline ios_base&
00774
unitbuf(
ios_base& __base)
00775 {
00776 __base.
setf(ios_base::unitbuf);
00777
return __base;
00778 }
00779
00780
00781
inline ios_base&
00782
nounitbuf(
ios_base& __base)
00783 {
00784 __base.
unsetf(ios_base::unitbuf);
00785
return __base;
00786 }
00787
00788
00789
00790
inline ios_base&
00791
internal(
ios_base& __base)
00792 {
00793 __base.
setf(ios_base::internal, ios_base::adjustfield);
00794
return __base;
00795 }
00796
00797
00798
inline ios_base&
00799
left(
ios_base& __base)
00800 {
00801 __base.
setf(ios_base::left, ios_base::adjustfield);
00802
return __base;
00803 }
00804
00805
00806
inline ios_base&
00807
right(
ios_base& __base)
00808 {
00809 __base.
setf(ios_base::right, ios_base::adjustfield);
00810
return __base;
00811 }
00812
00813
00814
00815
inline ios_base&
00816
dec(
ios_base& __base)
00817 {
00818 __base.
setf(ios_base::dec, ios_base::basefield);
00819
return __base;
00820 }
00821
00822
00823
inline ios_base&
00824
hex(
ios_base& __base)
00825 {
00826 __base.
setf(ios_base::hex, ios_base::basefield);
00827
return __base;
00828 }
00829
00830
00831
inline ios_base&
00832
oct(
ios_base& __base)
00833 {
00834 __base.
setf(ios_base::oct, ios_base::basefield);
00835
return __base;
00836 }
00837
00838
00839
00840
inline ios_base&
00841
fixed(
ios_base& __base)
00842 {
00843 __base.
setf(ios_base::fixed, ios_base::floatfield);
00844
return __base;
00845 }
00846
00847
00848
inline ios_base&
00849
scientific(
ios_base& __base)
00850 {
00851 __base.
setf(ios_base::scientific, ios_base::floatfield);
00852
return __base;
00853 }
00854
00855 }
00856
00857
#endif
00858