1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
14 | |
15 | |
16 | |
17 | |
18 | |
19 | |
20 | |
21 | |
22 | |
23 | |
24 | |
25 | |
26 | |
27 | |
28 | |
29 | |
30 | |
31 | |
32 | |
33 | #ifndef _GLIBCXX_IOMANIP |
34 | #define _GLIBCXX_IOMANIP 1 |
35 | |
36 | #pragma GCC system_header |
37 | |
38 | #include <bits/c++config.h> |
39 | #include <iosfwd> |
40 | #include <bits/ios_base.h> |
41 | |
42 | #if __cplusplus >= 201103L |
43 | #include <locale> |
44 | #if __cplusplus > 201103L |
45 | #include <bits/quoted_string.h> |
46 | #endif |
47 | #endif |
48 | |
49 | namespace std _GLIBCXX_VISIBILITY(default) |
50 | { |
51 | _GLIBCXX_BEGIN_NAMESPACE_VERSION |
52 | |
53 | |
54 | |
55 | |
56 | struct _Resetiosflags { ios_base::fmtflags _M_mask; }; |
57 | |
58 | |
59 | |
60 | |
61 | |
62 | |
63 | |
64 | |
65 | inline _Resetiosflags |
66 | resetiosflags(ios_base::fmtflags __mask) |
67 | { return { __mask }; } |
68 | |
69 | template<typename _CharT, typename _Traits> |
70 | inline basic_istream<_CharT, _Traits>& |
71 | operator>>(basic_istream<_CharT, _Traits>& __is, _Resetiosflags __f) |
72 | { |
73 | __is.setf(ios_base::fmtflags(0), __f._M_mask); |
74 | return __is; |
75 | } |
76 | |
77 | template<typename _CharT, typename _Traits> |
78 | inline basic_ostream<_CharT, _Traits>& |
79 | operator<<(basic_ostream<_CharT, _Traits>& __os, _Resetiosflags __f) |
80 | { |
81 | __os.setf(ios_base::fmtflags(0), __f._M_mask); |
82 | return __os; |
83 | } |
84 | |
85 | |
86 | struct _Setiosflags { ios_base::fmtflags _M_mask; }; |
87 | |
88 | |
89 | |
90 | |
91 | |
92 | |
93 | |
94 | |
95 | inline _Setiosflags |
96 | setiosflags(ios_base::fmtflags __mask) |
97 | { return { __mask }; } |
98 | |
99 | template<typename _CharT, typename _Traits> |
100 | inline basic_istream<_CharT, _Traits>& |
101 | operator>>(basic_istream<_CharT, _Traits>& __is, _Setiosflags __f) |
102 | { |
103 | __is.setf(__f._M_mask); |
104 | return __is; |
105 | } |
106 | |
107 | template<typename _CharT, typename _Traits> |
108 | inline basic_ostream<_CharT, _Traits>& |
109 | operator<<(basic_ostream<_CharT, _Traits>& __os, _Setiosflags __f) |
110 | { |
111 | __os.setf(__f._M_mask); |
112 | return __os; |
113 | } |
114 | |
115 | |
116 | struct _Setbase { int _M_base; }; |
117 | |
118 | |
119 | |
120 | |
121 | |
122 | |
123 | |
124 | |
125 | |
126 | inline _Setbase |
127 | setbase(int __base) |
128 | { return { __base }; } |
129 | |
130 | template<typename _CharT, typename _Traits> |
131 | inline basic_istream<_CharT, _Traits>& |
132 | operator>>(basic_istream<_CharT, _Traits>& __is, _Setbase __f) |
133 | { |
134 | __is.setf(__f._M_base == 8 ? ios_base::oct : |
135 | __f._M_base == 10 ? ios_base::dec : |
136 | __f._M_base == 16 ? ios_base::hex : |
137 | ios_base::fmtflags(0), ios_base::basefield); |
138 | return __is; |
139 | } |
140 | |
141 | template<typename _CharT, typename _Traits> |
142 | inline basic_ostream<_CharT, _Traits>& |
143 | operator<<(basic_ostream<_CharT, _Traits>& __os, _Setbase __f) |
144 | { |
145 | __os.setf(__f._M_base == 8 ? ios_base::oct : |
146 | __f._M_base == 10 ? ios_base::dec : |
147 | __f._M_base == 16 ? ios_base::hex : |
148 | ios_base::fmtflags(0), ios_base::basefield); |
149 | return __os; |
150 | } |
151 | |
152 | |
153 | template<typename _CharT> |
154 | struct _Setfill { _CharT _M_c; }; |
155 | |
156 | |
157 | |
158 | |
159 | |
160 | |
161 | |
162 | |
163 | template<typename _CharT> |
164 | inline _Setfill<_CharT> |
165 | setfill(_CharT __c) |
166 | { return { __c }; } |
167 | |
168 | template<typename _CharT, typename _Traits> |
169 | inline basic_istream<_CharT, _Traits>& |
170 | operator>>(basic_istream<_CharT, _Traits>& __is, _Setfill<_CharT> __f) |
171 | { |
172 | __is.fill(__f._M_c); |
173 | return __is; |
174 | } |
175 | |
176 | template<typename _CharT, typename _Traits> |
177 | inline basic_ostream<_CharT, _Traits>& |
178 | operator<<(basic_ostream<_CharT, _Traits>& __os, _Setfill<_CharT> __f) |
179 | { |
180 | __os.fill(__f._M_c); |
181 | return __os; |
182 | } |
183 | |
184 | |
185 | struct _Setprecision { int _M_n; }; |
186 | |
187 | |
188 | |
189 | |
190 | |
191 | |
192 | |
193 | |
194 | inline _Setprecision |
195 | setprecision(int __n) |
196 | { return { __n }; } |
197 | |
198 | template<typename _CharT, typename _Traits> |
199 | inline basic_istream<_CharT, _Traits>& |
200 | operator>>(basic_istream<_CharT, _Traits>& __is, _Setprecision __f) |
201 | { |
202 | __is.precision(__f._M_n); |
203 | return __is; |
204 | } |
205 | |
206 | template<typename _CharT, typename _Traits> |
207 | inline basic_ostream<_CharT, _Traits>& |
208 | operator<<(basic_ostream<_CharT, _Traits>& __os, _Setprecision __f) |
209 | { |
210 | __os.precision(__f._M_n); |
211 | return __os; |
212 | } |
213 | |
214 | |
215 | struct _Setw { int _M_n; }; |
216 | |
217 | |
218 | |
219 | |
220 | |
221 | |
222 | |
223 | |
224 | inline _Setw |
225 | setw(int __n) |
226 | { return { __n }; } |
227 | |
228 | template<typename _CharT, typename _Traits> |
229 | inline basic_istream<_CharT, _Traits>& |
230 | operator>>(basic_istream<_CharT, _Traits>& __is, _Setw __f) |
231 | { |
232 | __is.width(__f._M_n); |
233 | return __is; |
234 | } |
235 | |
236 | template<typename _CharT, typename _Traits> |
237 | inline basic_ostream<_CharT, _Traits>& |
238 | operator<<(basic_ostream<_CharT, _Traits>& __os, _Setw __f) |
239 | { |
240 | __os.width(__f._M_n); |
241 | return __os; |
242 | } |
243 | |
244 | #if __cplusplus >= 201103L |
245 | |
246 | template<typename _MoneyT> |
247 | struct _Get_money { _MoneyT& _M_mon; bool _M_intl; }; |
248 | |
249 | |
250 | |
251 | |
252 | |
253 | |
254 | |
255 | |
256 | |
257 | template<typename _MoneyT> |
258 | inline _Get_money<_MoneyT> |
259 | get_money(_MoneyT& __mon, bool __intl = false) |
260 | { return { __mon, __intl }; } |
261 | |
262 | template<typename _CharT, typename _Traits, typename _MoneyT> |
263 | basic_istream<_CharT, _Traits>& |
264 | operator>>(basic_istream<_CharT, _Traits>& __is, _Get_money<_MoneyT> __f) |
265 | { |
266 | typename basic_istream<_CharT, _Traits>::sentry __cerb(__is, false); |
267 | if (__cerb) |
268 | { |
269 | ios_base::iostate __err = ios_base::goodbit; |
270 | __try |
271 | { |
272 | typedef istreambuf_iterator<_CharT, _Traits> _Iter; |
273 | typedef money_get<_CharT, _Iter> _MoneyGet; |
274 | |
275 | const _MoneyGet& __mg = use_facet<_MoneyGet>(__is.getloc()); |
276 | __mg.get(_Iter(__is.rdbuf()), _Iter(), __f._M_intl, |
277 | __is, __err, __f._M_mon); |
278 | } |
279 | __catch(__cxxabiv1::__forced_unwind&) |
280 | { |
281 | __is._M_setstate(ios_base::badbit); |
282 | __throw_exception_again; |
283 | } |
284 | __catch(...) |
285 | { __is._M_setstate(ios_base::badbit); } |
286 | if (__err) |
287 | __is.setstate(__err); |
288 | } |
289 | return __is; |
290 | } |
291 | |
292 | |
293 | template<typename _MoneyT> |
294 | struct _Put_money { const _MoneyT& _M_mon; bool _M_intl; }; |
295 | |
296 | |
297 | |
298 | |
299 | |
300 | |
301 | |
302 | |
303 | |
304 | template<typename _MoneyT> |
305 | inline _Put_money<_MoneyT> |
306 | put_money(const _MoneyT& __mon, bool __intl = false) |
307 | { return { __mon, __intl }; } |
308 | |
309 | template<typename _CharT, typename _Traits, typename _MoneyT> |
310 | basic_ostream<_CharT, _Traits>& |
311 | operator<<(basic_ostream<_CharT, _Traits>& __os, _Put_money<_MoneyT> __f) |
312 | { |
313 | typename basic_ostream<_CharT, _Traits>::sentry __cerb(__os); |
314 | if (__cerb) |
315 | { |
316 | ios_base::iostate __err = ios_base::goodbit; |
317 | __try |
318 | { |
319 | typedef ostreambuf_iterator<_CharT, _Traits> _Iter; |
320 | typedef money_put<_CharT, _Iter> _MoneyPut; |
321 | |
322 | const _MoneyPut& __mp = use_facet<_MoneyPut>(__os.getloc()); |
323 | if (__mp.put(_Iter(__os.rdbuf()), __f._M_intl, __os, |
324 | __os.fill(), __f._M_mon).failed()) |
325 | __err |= ios_base::badbit; |
326 | } |
327 | __catch(__cxxabiv1::__forced_unwind&) |
328 | { |
329 | __os._M_setstate(ios_base::badbit); |
330 | __throw_exception_again; |
331 | } |
332 | __catch(...) |
333 | { __os._M_setstate(ios_base::badbit); } |
334 | if (__err) |
335 | __os.setstate(__err); |
336 | } |
337 | return __os; |
338 | } |
339 | |
340 | template<typename _CharT> |
341 | struct _Put_time |
342 | { |
343 | const std::tm* _M_tmb; |
344 | const _CharT* _M_fmt; |
345 | }; |
346 | |
347 | |
348 | |
349 | |
350 | |
351 | |
352 | |
353 | |
354 | |
355 | |
356 | template<typename _CharT> |
357 | inline _Put_time<_CharT> |
358 | put_time(const std::tm* __tmb, const _CharT* __fmt) |
359 | { return { __tmb, __fmt }; } |
360 | |
361 | template<typename _CharT, typename _Traits> |
362 | basic_ostream<_CharT, _Traits>& |
363 | operator<<(basic_ostream<_CharT, _Traits>& __os, _Put_time<_CharT> __f) |
364 | { |
365 | typename basic_ostream<_CharT, _Traits>::sentry __cerb(__os); |
366 | if (__cerb) |
367 | { |
368 | ios_base::iostate __err = ios_base::goodbit; |
369 | __try |
370 | { |
371 | typedef ostreambuf_iterator<_CharT, _Traits> _Iter; |
372 | typedef time_put<_CharT, _Iter> _TimePut; |
373 | |
374 | const _CharT* const __fmt_end = __f._M_fmt + |
375 | _Traits::length(__f._M_fmt); |
376 | |
377 | const _TimePut& __mp = use_facet<_TimePut>(__os.getloc()); |
378 | if (__mp.put(_Iter(__os.rdbuf()), __os, __os.fill(), |
379 | __f._M_tmb, __f._M_fmt, __fmt_end).failed()) |
380 | __err |= ios_base::badbit; |
381 | } |
382 | __catch(__cxxabiv1::__forced_unwind&) |
383 | { |
384 | __os._M_setstate(ios_base::badbit); |
385 | __throw_exception_again; |
386 | } |
387 | __catch(...) |
388 | { __os._M_setstate(ios_base::badbit); } |
389 | if (__err) |
390 | __os.setstate(__err); |
391 | } |
392 | return __os; |
393 | } |
394 | |
395 | template<typename _CharT> |
396 | struct _Get_time |
397 | { |
398 | std::tm* _M_tmb; |
399 | const _CharT* _M_fmt; |
400 | }; |
401 | |
402 | |
403 | |
404 | |
405 | |
406 | |
407 | |
408 | |
409 | |
410 | |
411 | template<typename _CharT> |
412 | inline _Get_time<_CharT> |
413 | get_time(std::tm* __tmb, const _CharT* __fmt) |
414 | { return { __tmb, __fmt }; } |
415 | |
416 | template<typename _CharT, typename _Traits> |
417 | basic_istream<_CharT, _Traits>& |
418 | operator>>(basic_istream<_CharT, _Traits>& __is, _Get_time<_CharT> __f) |
419 | { |
420 | typename basic_istream<_CharT, _Traits>::sentry __cerb(__is, false); |
421 | if (__cerb) |
422 | { |
423 | ios_base::iostate __err = ios_base::goodbit; |
424 | __try |
425 | { |
426 | typedef istreambuf_iterator<_CharT, _Traits> _Iter; |
427 | typedef time_get<_CharT, _Iter> _TimeGet; |
428 | |
429 | const _CharT* const __fmt_end = __f._M_fmt + |
430 | _Traits::length(__f._M_fmt); |
431 | |
432 | const _TimeGet& __mg = use_facet<_TimeGet>(__is.getloc()); |
433 | __mg.get(_Iter(__is.rdbuf()), _Iter(), __is, |
434 | __err, __f._M_tmb, __f._M_fmt, __fmt_end); |
435 | } |
436 | __catch(__cxxabiv1::__forced_unwind&) |
437 | { |
438 | __is._M_setstate(ios_base::badbit); |
439 | __throw_exception_again; |
440 | } |
441 | __catch(...) |
442 | { __is._M_setstate(ios_base::badbit); } |
443 | if (__err) |
444 | __is.setstate(__err); |
445 | } |
446 | return __is; |
447 | } |
448 | |
449 | #if __cplusplus > 201103L |
450 | |
451 | #define __cpp_lib_quoted_string_io 201304 |
452 | |
453 | |
454 | |
455 | |
456 | |
457 | |
458 | |
459 | template<typename _CharT> |
460 | inline auto |
461 | quoted(const _CharT* __string, |
462 | _CharT __delim = _CharT('"'), _CharT __escape = _CharT('\\')) |
463 | { |
464 | return __detail::_Quoted_string<const _CharT*, _CharT>(__string, __delim, |
465 | __escape); |
466 | } |
467 | |
468 | template<typename _CharT, typename _Traits, typename _Alloc> |
469 | inline auto |
470 | quoted(const basic_string<_CharT, _Traits, _Alloc>& __string, |
471 | _CharT __delim = _CharT('"'), _CharT __escape = _CharT('\\')) |
472 | { |
473 | return __detail::_Quoted_string< |
474 | const basic_string<_CharT, _Traits, _Alloc>&, _CharT>( |
475 | __string, __delim, __escape); |
476 | } |
477 | |
478 | template<typename _CharT, typename _Traits, typename _Alloc> |
479 | inline auto |
480 | quoted(basic_string<_CharT, _Traits, _Alloc>& __string, |
481 | _CharT __delim = _CharT('"'), _CharT __escape = _CharT('\\')) |
482 | { |
483 | return __detail::_Quoted_string< |
484 | basic_string<_CharT, _Traits, _Alloc>&, _CharT>( |
485 | __string, __delim, __escape); |
486 | } |
487 | |
488 | #endif |
489 | |
490 | #endif |
491 | |
492 | |
493 | |
494 | |
495 | #if _GLIBCXX_EXTERN_TEMPLATE |
496 | extern template ostream& operator<<(ostream&, _Setfill<char>); |
497 | extern template ostream& operator<<(ostream&, _Setiosflags); |
498 | extern template ostream& operator<<(ostream&, _Resetiosflags); |
499 | extern template ostream& operator<<(ostream&, _Setbase); |
500 | extern template ostream& operator<<(ostream&, _Setprecision); |
501 | extern template ostream& operator<<(ostream&, _Setw); |
502 | extern template istream& operator>>(istream&, _Setfill<char>); |
503 | extern template istream& operator>>(istream&, _Setiosflags); |
504 | extern template istream& operator>>(istream&, _Resetiosflags); |
505 | extern template istream& operator>>(istream&, _Setbase); |
506 | extern template istream& operator>>(istream&, _Setprecision); |
507 | extern template istream& operator>>(istream&, _Setw); |
508 | |
509 | #ifdef _GLIBCXX_USE_WCHAR_T |
510 | extern template wostream& operator<<(wostream&, _Setfill<wchar_t>); |
511 | extern template wostream& operator<<(wostream&, _Setiosflags); |
512 | extern template wostream& operator<<(wostream&, _Resetiosflags); |
513 | extern template wostream& operator<<(wostream&, _Setbase); |
514 | extern template wostream& operator<<(wostream&, _Setprecision); |
515 | extern template wostream& operator<<(wostream&, _Setw); |
516 | extern template wistream& operator>>(wistream&, _Setfill<wchar_t>); |
517 | extern template wistream& operator>>(wistream&, _Setiosflags); |
518 | extern template wistream& operator>>(wistream&, _Resetiosflags); |
519 | extern template wistream& operator>>(wistream&, _Setbase); |
520 | extern template wistream& operator>>(wistream&, _Setprecision); |
521 | extern template wistream& operator>>(wistream&, _Setw); |
522 | #endif |
523 | #endif |
524 | |
525 | _GLIBCXX_END_NAMESPACE_VERSION |
526 | } |
527 | |
528 | #endif |
529 | |