]> git.proxmox.com Git - ceph.git/blob - ceph/src/boost/libs/ratio/include/boost/ratio/detail/ratio_io.hpp
add subtree-ish sources for 12.0.3
[ceph.git] / ceph / src / boost / libs / ratio / include / boost / ratio / detail / ratio_io.hpp
1 // ratio_io
2 //
3 // (C) Copyright Howard Hinnant
4 // (C) Copyright 2010 Vicente J. Botet Escriba
5 // Use, modification and distribution are subject to the Boost Software License,
6 // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
7 // http://www.boost.org/LICENSE_1_0.txt).
8 //
9 // This code was adapted by Vicente from Howard Hinnant's experimental work
10 // on chrono i/o under lvm/libc++ to Boost
11
12 #ifndef BOOST_RATIO_DETAIL_RATIO_IO_HPP
13 #define BOOST_RATIO_DETAIL_RATIO_IO_HPP
14
15 /*
16
17 ratio_io synopsis
18
19 #include <ratio>
20 #include <string>
21
22 namespace boost
23 {
24
25 template <class Ratio, class CharT>
26 struct ratio_string
27 {
28 static basic_string<CharT> short_name();
29 static basic_string<CharT> long_name();
30 };
31
32 } // boost
33
34 */
35
36 #include <boost/config.hpp>
37 #include <boost/ratio/ratio.hpp>
38 #include <boost/type_traits/integral_constant.hpp>
39 #include <string>
40 #include <sstream>
41
42 #if defined(BOOST_NO_CXX11_UNICODE_LITERALS) || defined(BOOST_NO_CXX11_CHAR16_T) || defined(BOOST_NO_CXX11_CHAR32_T) || defined(BOOST_NO_CXX11_U16STRING) || defined(BOOST_NO_CXX11_U32STRING)
43 #if defined BOOST_RATIO_HAS_UNICODE_SUPPORT
44 #undef BOOST_RATIO_HAS_UNICODE_SUPPORT
45 #endif
46 #else
47 #define BOOST_RATIO_HAS_UNICODE_SUPPORT 1
48 #endif
49
50 namespace boost {
51
52 //template <class Ratio>
53 //struct ratio_string_is_localizable : false_type {};
54 //template <class Ratio>
55 //struct ratio_string_id : integral_constant<int,0> {};
56
57 template <class Ratio, class CharT>
58 struct ratio_string
59 {
60 static std::basic_string<CharT> short_name() {return long_name();}
61 static std::basic_string<CharT> long_name();
62 static std::basic_string<CharT> symbol() {return short_name();}
63 static std::basic_string<CharT> prefix() {return long_name();}
64 };
65
66 template <class Ratio, class CharT>
67 std::basic_string<CharT>
68 ratio_string<Ratio, CharT>::long_name()
69 {
70 std::basic_ostringstream<CharT> os;
71 os << CharT('[') << Ratio::num << CharT('/')
72 << Ratio::den << CharT(']');
73 return os.str();
74 }
75
76 #ifdef BOOST_RATIO_HAS_STATIC_STRING
77 namespace ratio_detail {
78 template <class Ratio, class CharT>
79 struct ratio_string_static
80 {
81 static std::string short_name() {
82 return std::basic_string<CharT>(
83 static_string::c_str<
84 typename ratio_static_string<Ratio, CharT>::short_name
85 >::value);
86 }
87 static std::string long_name() {
88 return std::basic_string<CharT>(
89 static_string::c_str<
90 typename ratio_static_string<Ratio, CharT>::long_name
91 >::value);
92 }
93 static std::basic_string<CharT> symbol() {return short_name();}
94 static std::basic_string<CharT> prefix() {return long_name();}
95 };
96 }
97 #endif
98 // atto
99 //template <>
100 //struct ratio_string_is_localizable<atto> : true_type {};
101 //
102 //template <>
103 //struct ratio_string_id<atto> : integral_constant<int,-18> {};
104
105 #ifdef BOOST_RATIO_HAS_STATIC_STRING
106 template <typename CharT>
107 struct ratio_string<atto, CharT> :
108 ratio_detail::ratio_string_static<atto,CharT>
109 {};
110
111 #else
112 template <>
113 struct ratio_string<atto, char>
114 {
115 static std::string short_name() {return std::string(1, 'a');}
116 static std::string long_name() {return std::string("atto");}
117 static std::string symbol() {return short_name();}
118 static std::string prefix() {return long_name();}
119 };
120
121 #if BOOST_RATIO_HAS_UNICODE_SUPPORT
122
123 template <>
124 struct ratio_string<atto, char16_t>
125 {
126 static std::u16string short_name() {return std::u16string(1, u'a');}
127 static std::u16string long_name() {return std::u16string(u"atto");}
128 static std::u16string symbol() {return short_name();}
129 static std::u16string prefix() {return long_name();}
130 };
131
132 template <>
133 struct ratio_string<atto, char32_t>
134 {
135 static std::u32string short_name() {return std::u32string(1, U'a');}
136 static std::u32string long_name() {return std::u32string(U"atto");}
137 static std::u32string symbol() {return short_name();}
138 static std::u32string prefix() {return long_name();}
139 };
140
141 #endif
142
143 #ifndef BOOST_NO_STD_WSTRING
144 template <>
145 struct ratio_string<atto, wchar_t>
146 {
147 static std::wstring short_name() {return std::wstring(1, L'a');}
148 static std::wstring long_name() {return std::wstring(L"atto");}
149 static std::wstring symbol() {return short_name();}
150 static std::wstring prefix() {return long_name();}
151 };
152 #endif
153 #endif
154
155 // femto
156
157 //template <>
158 //struct ratio_string_is_localizable<femto> : true_type {};
159 //
160 //template <>
161 //struct ratio_string_id<femto> : integral_constant<int,-15> {};
162
163 #ifdef BOOST_RATIO_HAS_STATIC_STRING
164 template <typename CharT>
165 struct ratio_string<femto, CharT> :
166 ratio_detail::ratio_string_static<femto,CharT>
167 {};
168
169 #else
170
171 template <>
172 struct ratio_string<femto, char>
173 {
174 static std::string short_name() {return std::string(1, 'f');}
175 static std::string long_name() {return std::string("femto");}
176 static std::string symbol() {return short_name();}
177 static std::string prefix() {return long_name();}
178 };
179
180 #if BOOST_RATIO_HAS_UNICODE_SUPPORT
181
182 template <>
183 struct ratio_string<femto, char16_t>
184 {
185 static std::u16string short_name() {return std::u16string(1, u'f');}
186 static std::u16string long_name() {return std::u16string(u"femto");}
187 static std::u16string symbol() {return short_name();}
188 static std::u16string prefix() {return long_name();}
189 };
190
191 template <>
192 struct ratio_string<femto, char32_t>
193 {
194 static std::u32string short_name() {return std::u32string(1, U'f');}
195 static std::u32string long_name() {return std::u32string(U"femto");}
196 static std::u32string symbol() {return short_name();}
197 static std::u32string prefix() {return long_name();}
198 };
199
200 #endif
201
202 #ifndef BOOST_NO_STD_WSTRING
203 template <>
204 struct ratio_string<femto, wchar_t>
205 {
206 static std::wstring short_name() {return std::wstring(1, L'f');}
207 static std::wstring long_name() {return std::wstring(L"femto");}
208 static std::wstring symbol() {return short_name();}
209 static std::wstring prefix() {return long_name();}
210 };
211 #endif
212 #endif
213
214 // pico
215
216 //template <>
217 //struct ratio_string_is_localizable<pico> : true_type {};
218 //
219 //template <>
220 //struct ratio_string_id<pico> : integral_constant<int,-12> {};
221
222 #ifdef BOOST_RATIO_HAS_STATIC_STRING
223 template <typename CharT>
224 struct ratio_string<pico, CharT> :
225 ratio_detail::ratio_string_static<pico,CharT>
226 {};
227
228 #else
229 template <>
230 struct ratio_string<pico, char>
231 {
232 static std::string short_name() {return std::string(1, 'p');}
233 static std::string long_name() {return std::string("pico");}
234 static std::string symbol() {return short_name();}
235 static std::string prefix() {return long_name();}
236 };
237
238 #if BOOST_RATIO_HAS_UNICODE_SUPPORT
239
240 template <>
241 struct ratio_string<pico, char16_t>
242 {
243 static std::u16string short_name() {return std::u16string(1, u'p');}
244 static std::u16string long_name() {return std::u16string(u"pico");}
245 static std::u16string symbol() {return short_name();}
246 static std::u16string prefix() {return long_name();}
247 };
248
249 template <>
250 struct ratio_string<pico, char32_t>
251 {
252 static std::u32string short_name() {return std::u32string(1, U'p');}
253 static std::u32string long_name() {return std::u32string(U"pico");}
254 static std::u32string symbol() {return short_name();}
255 static std::u32string prefix() {return long_name();}
256 };
257
258 #endif
259
260 #ifndef BOOST_NO_STD_WSTRING
261 template <>
262 struct ratio_string<pico, wchar_t>
263 {
264 static std::wstring short_name() {return std::wstring(1, L'p');}
265 static std::wstring long_name() {return std::wstring(L"pico");}
266 static std::wstring symbol() {return short_name();}
267 static std::wstring prefix() {return long_name();}
268 };
269 #endif
270 #endif
271
272 // nano
273
274 //template <>
275 //struct ratio_string_is_localizable<nano> : true_type {};
276 //
277 //template <>
278 //struct ratio_string_id<nano> : integral_constant<int,-9> {};
279
280 #ifdef BOOST_RATIO_HAS_STATIC_STRING
281 template <typename CharT>
282 struct ratio_string<nano, CharT> :
283 ratio_detail::ratio_string_static<nano,CharT>
284 {};
285
286 #else
287 template <>
288 struct ratio_string<nano, char>
289 {
290 static std::string short_name() {return std::string(1, 'n');}
291 static std::string long_name() {return std::string("nano");}
292 static std::string symbol() {return short_name();}
293 static std::string prefix() {return long_name();}
294 };
295
296 #if BOOST_RATIO_HAS_UNICODE_SUPPORT
297
298 template <>
299 struct ratio_string<nano, char16_t>
300 {
301 static std::u16string short_name() {return std::u16string(1, u'n');}
302 static std::u16string long_name() {return std::u16string(u"nano");}
303 static std::u16string symbol() {return short_name();}
304 static std::u16string prefix() {return long_name();}
305 };
306
307 template <>
308 struct ratio_string<nano, char32_t>
309 {
310 static std::u32string short_name() {return std::u32string(1, U'n');}
311 static std::u32string long_name() {return std::u32string(U"nano");}
312 static std::u32string symbol() {return short_name();}
313 static std::u32string prefix() {return long_name();}
314 };
315
316 #endif
317
318 #ifndef BOOST_NO_STD_WSTRING
319 template <>
320 struct ratio_string<nano, wchar_t>
321 {
322 static std::wstring short_name() {return std::wstring(1, L'n');}
323 static std::wstring long_name() {return std::wstring(L"nano");}
324 static std::wstring symbol() {return short_name();}
325 static std::wstring prefix() {return long_name();}
326 };
327 #endif
328 #endif
329
330 // micro
331
332 //template <>
333 //struct ratio_string_is_localizable<micro> : true_type {};
334 //
335 //template <>
336 //struct ratio_string_id<micro> : integral_constant<int,-6> {};
337
338 #ifdef BOOST_RATIO_HAS_STATIC_STRING
339 template <typename CharT>
340 struct ratio_string<micro, CharT> :
341 ratio_detail::ratio_string_static<micro,CharT>
342 {};
343
344 #else
345 template <>
346 struct ratio_string<micro, char>
347 {
348 static std::string short_name() {return std::string("\xC2\xB5");}
349 static std::string long_name() {return std::string("micro");}
350 static std::string symbol() {return short_name();}
351 static std::string prefix() {return long_name();}
352 };
353
354 #if BOOST_RATIO_HAS_UNICODE_SUPPORT
355
356 template <>
357 struct ratio_string<micro, char16_t>
358 {
359 static std::u16string short_name() {return std::u16string(1, u'\xB5');}
360 static std::u16string long_name() {return std::u16string(u"micro");}
361 static std::u16string symbol() {return short_name();}
362 static std::u16string prefix() {return long_name();}
363 };
364
365 template <>
366 struct ratio_string<micro, char32_t>
367 {
368 static std::u32string short_name() {return std::u32string(1, U'\xB5');}
369 static std::u32string long_name() {return std::u32string(U"micro");}
370 static std::u32string symbol() {return short_name();}
371 static std::u32string prefix() {return long_name();}
372 };
373
374 #endif
375
376 #ifndef BOOST_NO_STD_WSTRING
377 template <>
378 struct ratio_string<micro, wchar_t>
379 {
380 static std::wstring short_name() {return std::wstring(1, L'\xB5');}
381 static std::wstring long_name() {return std::wstring(L"micro");}
382 static std::wstring symbol() {return short_name();}
383 static std::wstring prefix() {return long_name();}
384 };
385 #endif
386 #endif
387
388 // milli
389
390 //template <>
391 //struct ratio_string_is_localizable<milli> : true_type {};
392 //
393 //template <>
394 //struct ratio_string_id<milli> : integral_constant<int,-3> {};
395
396 #ifdef BOOST_RATIO_HAS_STATIC_STRING
397 template <typename CharT>
398 struct ratio_string<milli, CharT> :
399 ratio_detail::ratio_string_static<milli,CharT>
400 {};
401
402 #else
403 template <>
404 struct ratio_string<milli, char>
405 {
406 static std::string short_name() {return std::string(1, 'm');}
407 static std::string long_name() {return std::string("milli");}
408 static std::string symbol() {return short_name();}
409 static std::string prefix() {return long_name();}
410 };
411
412 #if BOOST_RATIO_HAS_UNICODE_SUPPORT
413
414 template <>
415 struct ratio_string<milli, char16_t>
416 {
417 static std::u16string short_name() {return std::u16string(1, u'm');}
418 static std::u16string long_name() {return std::u16string(u"milli");}
419 static std::u16string symbol() {return short_name();}
420 static std::u16string prefix() {return long_name();}
421 };
422
423 template <>
424 struct ratio_string<milli, char32_t>
425 {
426 static std::u32string short_name() {return std::u32string(1, U'm');}
427 static std::u32string long_name() {return std::u32string(U"milli");}
428 static std::u32string symbol() {return short_name();}
429 static std::u32string prefix() {return long_name();}
430 };
431
432 #endif
433
434 #ifndef BOOST_NO_STD_WSTRING
435 template <>
436 struct ratio_string<milli, wchar_t>
437 {
438 static std::wstring short_name() {return std::wstring(1, L'm');}
439 static std::wstring long_name() {return std::wstring(L"milli");}
440 static std::wstring symbol() {return short_name();}
441 static std::wstring prefix() {return long_name();}
442 };
443 #endif
444 #endif
445
446 // centi
447
448 //template <>
449 //struct ratio_string_is_localizable<centi> : true_type {};
450 //
451 //template <>
452 //struct ratio_string_id<centi> : integral_constant<int,-2> {};
453
454 #ifdef BOOST_RATIO_HAS_STATIC_STRING
455 template <typename CharT>
456 struct ratio_string<centi, CharT> :
457 ratio_detail::ratio_string_static<centi,CharT>
458 {};
459
460 #else
461 template <>
462 struct ratio_string<centi, char>
463 {
464 static std::string short_name() {return std::string(1, 'c');}
465 static std::string long_name() {return std::string("centi");}
466 static std::string symbol() {return short_name();}
467 static std::string prefix() {return long_name();}
468 };
469
470 #if BOOST_RATIO_HAS_UNICODE_SUPPORT
471
472 template <>
473 struct ratio_string<centi, char16_t>
474 {
475 static std::u16string short_name() {return std::u16string(1, u'c');}
476 static std::u16string long_name() {return std::u16string(u"centi");}
477 static std::u16string symbol() {return short_name();}
478 static std::u16string prefix() {return long_name();}
479 };
480
481 template <>
482 struct ratio_string<centi, char32_t>
483 {
484 static std::u32string short_name() {return std::u32string(1, U'c');}
485 static std::u32string long_name() {return std::u32string(U"centi");}
486 static std::u32string symbol() {return short_name();}
487 static std::u32string prefix() {return long_name();}
488 };
489
490 #endif
491
492 #ifndef BOOST_NO_STD_WSTRING
493 template <>
494 struct ratio_string<centi, wchar_t>
495 {
496 static std::wstring short_name() {return std::wstring(1, L'c');}
497 static std::wstring long_name() {return std::wstring(L"centi");}
498 static std::wstring symbol() {return short_name();}
499 static std::wstring prefix() {return long_name();}
500 };
501 #endif
502 #endif
503
504 // deci
505
506 //template <>
507 //struct ratio_string_is_localizable<deci> : true_type {};
508 //
509 //template <>
510 //struct ratio_string_id<deci> : integral_constant<int,-1> {};
511
512 #ifdef BOOST_RATIO_HAS_STATIC_STRING
513 template <typename CharT>
514 struct ratio_string<deci, CharT> :
515 ratio_detail::ratio_string_static<deci,CharT>
516 {};
517
518 #else
519
520 template <>
521 struct ratio_string<deci, char>
522 {
523 static std::string short_name() {return std::string(1, 'd');}
524 static std::string long_name() {return std::string("deci");}
525 static std::string symbol() {return short_name();}
526 static std::string prefix() {return long_name();}
527 };
528
529 #if BOOST_RATIO_HAS_UNICODE_SUPPORT
530
531 template <>
532 struct ratio_string<deci, char16_t>
533 {
534 static std::u16string short_name() {return std::u16string(1, u'd');}
535 static std::u16string long_name() {return std::u16string(u"deci");}
536 static std::u16string symbol() {return short_name();}
537 static std::u16string prefix() {return long_name();}
538 };
539
540 template <>
541 struct ratio_string<deci, char32_t>
542 {
543 static std::u32string short_name() {return std::u32string(1, U'd');}
544 static std::u32string long_name() {return std::u32string(U"deci");}
545 static std::u32string symbol() {return short_name();}
546 static std::u32string prefix() {return long_name();}
547 };
548
549 #endif
550
551 #ifndef BOOST_NO_STD_WSTRING
552 template <>
553 struct ratio_string<deci, wchar_t>
554 {
555 static std::wstring short_name() {return std::wstring(1, L'd');}
556 static std::wstring long_name() {return std::wstring(L"deci");}
557 static std::wstring symbol() {return short_name();}
558 static std::wstring prefix() {return long_name();}
559 };
560 #endif
561 #endif
562
563 // unit
564
565 //template <>
566 //struct ratio_string_is_localizable<ratio<1> > : true_type {};
567 //
568 //template <>
569 //struct ratio_string_id<ratio<1> > : integral_constant<int,0> {};
570 // deca
571
572 //template <>
573 //struct ratio_string_is_localizable<deca> : true_type {};
574 //
575 //template <>
576 //struct ratio_string_id<deca> : integral_constant<int,1> {};
577
578 #ifdef BOOST_RATIO_HAS_STATIC_STRING
579 template <typename CharT>
580 struct ratio_string<deca, CharT> :
581 ratio_detail::ratio_string_static<deca,CharT>
582 {};
583
584 #else
585 template <>
586 struct ratio_string<deca, char>
587 {
588 static std::string short_name() {return std::string("da");}
589 static std::string long_name() {return std::string("deca");}
590 static std::string symbol() {return short_name();}
591 static std::string prefix() {return long_name();}
592 };
593
594 #if BOOST_RATIO_HAS_UNICODE_SUPPORT
595
596 template <>
597 struct ratio_string<deca, char16_t>
598 {
599 static std::u16string short_name() {return std::u16string(u"da");}
600 static std::u16string long_name() {return std::u16string(u"deca");}
601 static std::u16string symbol() {return short_name();}
602 static std::u16string prefix() {return long_name();}
603 };
604
605 template <>
606 struct ratio_string<deca, char32_t>
607 {
608 static std::u32string short_name() {return std::u32string(U"da");}
609 static std::u32string long_name() {return std::u32string(U"deca");}
610 static std::u32string symbol() {return short_name();}
611 static std::u32string prefix() {return long_name();}
612 };
613
614 #endif
615
616 #ifndef BOOST_NO_STD_WSTRING
617 template <>
618 struct ratio_string<deca, wchar_t>
619 {
620 static std::wstring short_name() {return std::wstring(L"da");}
621 static std::wstring long_name() {return std::wstring(L"deca");}
622 static std::wstring symbol() {return short_name();}
623 static std::wstring prefix() {return long_name();}
624 };
625 #endif
626 #endif
627
628 // hecto
629
630 //template <>
631 //struct ratio_string_is_localizable<hecto> : true_type {};
632 //
633 //template <>
634 //struct ratio_string_id<hecto> : integral_constant<int,2> {};
635
636
637 #ifdef BOOST_RATIO_HAS_STATIC_STRING
638 template <typename CharT>
639 struct ratio_string<hecto, CharT> :
640 ratio_detail::ratio_string_static<hecto,CharT>
641 {};
642
643 #else
644 template <>
645 struct ratio_string<hecto, char>
646 {
647 static std::string short_name() {return std::string(1, 'h');}
648 static std::string long_name() {return std::string("hecto");}
649 static std::string symbol() {return short_name();}
650 static std::string prefix() {return long_name();}
651 };
652
653 #if BOOST_RATIO_HAS_UNICODE_SUPPORT
654
655 template <>
656 struct ratio_string<hecto, char16_t>
657 {
658 static std::u16string short_name() {return std::u16string(1, u'h');}
659 static std::u16string long_name() {return std::u16string(u"hecto");}
660 static std::u16string symbol() {return short_name();}
661 static std::u16string prefix() {return long_name();}
662 };
663
664 template <>
665 struct ratio_string<hecto, char32_t>
666 {
667 static std::u32string short_name() {return std::u32string(1, U'h');}
668 static std::u32string long_name() {return std::u32string(U"hecto");}
669 static std::u32string symbol() {return short_name();}
670 static std::u32string prefix() {return long_name();}
671 };
672
673 #endif
674
675 #ifndef BOOST_NO_STD_WSTRING
676 template <>
677 struct ratio_string<hecto, wchar_t>
678 {
679 static std::wstring short_name() {return std::wstring(1, L'h');}
680 static std::wstring long_name() {return std::wstring(L"hecto");}
681 static std::wstring symbol() {return short_name();}
682 static std::wstring prefix() {return long_name();}
683 };
684 #endif
685 #endif
686
687 // kilo
688
689 //template <>
690 //struct ratio_string_is_localizable<kilo> : true_type {};
691 //
692 //template <>
693 //struct ratio_string_id<kilo> : integral_constant<int,3> {};
694
695 #ifdef BOOST_RATIO_HAS_STATIC_STRING
696 template <typename CharT>
697 struct ratio_string<kilo, CharT> :
698 ratio_detail::ratio_string_static<kilo,CharT>
699 {};
700
701 #else
702 template <>
703 struct ratio_string<kilo, char>
704 {
705 static std::string short_name() {return std::string(1, 'k');}
706 static std::string long_name() {return std::string("kilo");}
707 static std::string symbol() {return short_name();}
708 static std::string prefix() {return long_name();}
709 };
710
711 #if BOOST_RATIO_HAS_UNICODE_SUPPORT
712
713 template <>
714 struct ratio_string<kilo, char16_t>
715 {
716 static std::u16string short_name() {return std::u16string(1, u'k');}
717 static std::u16string long_name() {return std::u16string(u"kilo");}
718 static std::u16string symbol() {return short_name();}
719 static std::u16string prefix() {return long_name();}
720 };
721
722 template <>
723 struct ratio_string<kilo, char32_t>
724 {
725 static std::u32string short_name() {return std::u32string(1, U'k');}
726 static std::u32string long_name() {return std::u32string(U"kilo");}
727 static std::u32string symbol() {return short_name();}
728 static std::u32string prefix() {return long_name();}
729 };
730
731 #endif
732
733 #ifndef BOOST_NO_STD_WSTRING
734 template <>
735 struct ratio_string<kilo, wchar_t>
736 {
737 static std::wstring short_name() {return std::wstring(1, L'k');}
738 static std::wstring long_name() {return std::wstring(L"kilo");}
739 static std::wstring symbol() {return short_name();}
740 static std::wstring prefix() {return long_name();}
741 };
742 #endif
743 #endif
744
745 // mega
746
747 //template <>
748 //struct ratio_string_is_localizable<mega> : true_type {};
749 //
750 //template <>
751 //struct ratio_string_id<mega> : integral_constant<int,6> {};
752
753 #ifdef BOOST_RATIO_HAS_STATIC_STRING
754 template <typename CharT>
755 struct ratio_string<mega, CharT> :
756 ratio_detail::ratio_string_static<mega,CharT>
757 {};
758
759 #else
760
761 template <>
762 struct ratio_string<mega, char>
763 {
764 static std::string short_name() {return std::string(1, 'M');}
765 static std::string long_name() {return std::string("mega");}
766 static std::string symbol() {return short_name();}
767 static std::string prefix() {return long_name();}
768 };
769
770 #if BOOST_RATIO_HAS_UNICODE_SUPPORT
771
772 template <>
773 struct ratio_string<mega, char16_t>
774 {
775 static std::u16string short_name() {return std::u16string(1, u'M');}
776 static std::u16string long_name() {return std::u16string(u"mega");}
777 static std::u16string symbol() {return short_name();}
778 static std::u16string prefix() {return long_name();}
779 };
780
781 template <>
782 struct ratio_string<mega, char32_t>
783 {
784 static std::u32string short_name() {return std::u32string(1, U'M');}
785 static std::u32string long_name() {return std::u32string(U"mega");}
786 static std::u32string symbol() {return short_name();}
787 static std::u32string prefix() {return long_name();}
788 };
789
790 #endif
791
792 #ifndef BOOST_NO_STD_WSTRING
793 template <>
794 struct ratio_string<mega, wchar_t>
795 {
796 static std::wstring short_name() {return std::wstring(1, L'M');}
797 static std::wstring long_name() {return std::wstring(L"mega");}
798 static std::wstring symbol() {return short_name();}
799 static std::wstring prefix() {return long_name();}
800 };
801 #endif
802 #endif
803
804 // giga
805
806 //template <>
807 //struct ratio_string_is_localizable<giga> : true_type {};
808 //
809 //template <>
810 //struct ratio_string_id<giga> : integral_constant<int,9> {};
811
812 #ifdef BOOST_RATIO_HAS_STATIC_STRING
813 template <typename CharT>
814 struct ratio_string<giga, CharT> :
815 ratio_detail::ratio_string_static<giga,CharT>
816 {};
817
818 #else
819
820 template <>
821 struct ratio_string<giga, char>
822 {
823 static std::string short_name() {return std::string(1, 'G');}
824 static std::string long_name() {return std::string("giga");}
825 static std::string symbol() {return short_name();}
826 static std::string prefix() {return long_name();}
827 };
828
829 #if BOOST_RATIO_HAS_UNICODE_SUPPORT
830
831 template <>
832 struct ratio_string<giga, char16_t>
833 {
834 static std::u16string short_name() {return std::u16string(1, u'G');}
835 static std::u16string long_name() {return std::u16string(u"giga");}
836 static std::u16string symbol() {return short_name();}
837 static std::u16string prefix() {return long_name();}
838 };
839
840 template <>
841 struct ratio_string<giga, char32_t>
842 {
843 static std::u32string short_name() {return std::u32string(1, U'G');}
844 static std::u32string long_name() {return std::u32string(U"giga");}
845 static std::u32string symbol() {return short_name();}
846 static std::u32string prefix() {return long_name();}
847 };
848
849 #endif
850
851 #ifndef BOOST_NO_STD_WSTRING
852 template <>
853 struct ratio_string<giga, wchar_t>
854 {
855 static std::wstring short_name() {return std::wstring(1, L'G');}
856 static std::wstring long_name() {return std::wstring(L"giga");}
857 static std::wstring symbol() {return short_name();}
858 static std::wstring prefix() {return long_name();}
859 };
860 #endif
861 #endif
862
863 // tera
864
865 //template <>
866 //struct ratio_string_is_localizable<tera> : true_type {};
867 //
868 //template <>
869 //struct ratio_string_id<tera> : integral_constant<int,12> {};
870
871 #ifdef BOOST_RATIO_HAS_STATIC_STRING
872 template <typename CharT>
873 struct ratio_string<tera, CharT> :
874 ratio_detail::ratio_string_static<tera,CharT>
875 {};
876
877 #else
878 template <>
879 struct ratio_string<tera, char>
880 {
881 static std::string short_name() {return std::string(1, 'T');}
882 static std::string long_name() {return std::string("tera");}
883 static std::string symbol() {return short_name();}
884 static std::string prefix() {return long_name();}
885 };
886
887 #if BOOST_RATIO_HAS_UNICODE_SUPPORT
888
889 template <>
890 struct ratio_string<tera, char16_t>
891 {
892 static std::u16string short_name() {return std::u16string(1, u'T');}
893 static std::u16string long_name() {return std::u16string(u"tera");}
894 static std::u16string symbol() {return short_name();}
895 static std::u16string prefix() {return long_name();}
896 };
897
898 template <>
899 struct ratio_string<tera, char32_t>
900 {
901 static std::u32string short_name() {return std::u32string(1, U'T');}
902 static std::u32string long_name() {return std::u32string(U"tera");}
903 static std::u32string symbol() {return short_name();}
904 static std::u32string prefix() {return long_name();}
905 };
906
907 #endif
908
909 #ifndef BOOST_NO_STD_WSTRING
910 template <>
911 struct ratio_string<tera, wchar_t>
912 {
913 static std::wstring short_name() {return std::wstring(1, L'T');}
914 static std::wstring long_name() {return std::wstring(L"tera");}
915 static std::wstring symbol() {return short_name();}
916 static std::wstring prefix() {return long_name();}
917 };
918 #endif
919 #endif
920
921 // peta
922
923 //template <>
924 //struct ratio_string_is_localizable<peta> : true_type {};
925 //
926 //template <>
927 //struct ratio_string_id<peta> : integral_constant<int,15> {};
928
929
930 #ifdef BOOST_RATIO_HAS_STATIC_STRING
931 template <typename CharT>
932 struct ratio_string<peta, CharT> :
933 ratio_detail::ratio_string_static<peta,CharT>
934 {};
935
936 #else
937 template <>
938 struct ratio_string<peta, char>
939 {
940 static std::string short_name() {return std::string(1, 'P');}
941 static std::string long_name() {return std::string("peta");}
942 static std::string symbol() {return short_name();}
943 static std::string prefix() {return long_name();}
944 };
945
946 #if BOOST_RATIO_HAS_UNICODE_SUPPORT
947
948 template <>
949 struct ratio_string<peta, char16_t>
950 {
951 static std::u16string short_name() {return std::u16string(1, u'P');}
952 static std::u16string long_name() {return std::u16string(u"peta");}
953 static std::u16string symbol() {return short_name();}
954 static std::u16string prefix() {return long_name();}
955 };
956
957 template <>
958 struct ratio_string<peta, char32_t>
959 {
960 static std::u32string short_name() {return std::u32string(1, U'P');}
961 static std::u32string long_name() {return std::u32string(U"peta");}
962 static std::u32string symbol() {return short_name();}
963 static std::u32string prefix() {return long_name();}
964 };
965
966 #endif
967
968 #ifndef BOOST_NO_STD_WSTRING
969 template <>
970 struct ratio_string<peta, wchar_t>
971 {
972 static std::wstring short_name() {return std::wstring(1, L'P');}
973 static std::wstring long_name() {return std::wstring(L"peta");}
974 static std::wstring symbol() {return short_name();}
975 static std::wstring prefix() {return long_name();}
976 };
977 #endif
978 #endif
979
980 // exa
981
982 //template <>
983 //struct ratio_string_is_localizable<exa> : true_type {};
984 //
985 //template <>
986 //struct ratio_string_id<exa> : integral_constant<int,18> {};
987
988 #ifdef BOOST_RATIO_HAS_STATIC_STRING
989 template <typename CharT>
990 struct ratio_string<exa, CharT> :
991 ratio_detail::ratio_string_static<exa,CharT>
992 {};
993
994 #else
995 template <>
996 struct ratio_string<exa, char>
997 {
998 static std::string short_name() {return std::string(1, 'E');}
999 static std::string long_name() {return std::string("exa");}
1000 static std::string symbol() {return short_name();}
1001 static std::string prefix() {return long_name();}
1002 };
1003
1004 #if BOOST_RATIO_HAS_UNICODE_SUPPORT
1005
1006 template <>
1007 struct ratio_string<exa, char16_t>
1008 {
1009 static std::u16string short_name() {return std::u16string(1, u'E');}
1010 static std::u16string long_name() {return std::u16string(u"exa");}
1011 static std::u16string symbol() {return short_name();}
1012 static std::u16string prefix() {return long_name();}
1013 };
1014
1015 template <>
1016 struct ratio_string<exa, char32_t>
1017 {
1018 static std::u32string short_name() {return std::u32string(1, U'E');}
1019 static std::u32string long_name() {return std::u32string(U"exa");}
1020 static std::u32string symbol() {return short_name();}
1021 static std::u32string prefix() {return long_name();}
1022 };
1023
1024 #endif
1025
1026 #ifndef BOOST_NO_STD_WSTRING
1027 template <>
1028 struct ratio_string<exa, wchar_t>
1029 {
1030 static std::wstring short_name() {return std::wstring(1, L'E');}
1031 static std::wstring long_name() {return std::wstring(L"exa");}
1032 static std::wstring symbol() {return short_name();}
1033 static std::wstring prefix() {return long_name();}
1034 };
1035 #endif
1036 #endif
1037
1038 #ifdef BOOST_RATIO_EXTENSIONS
1039
1040 #ifdef BOOST_RATIO_HAS_STATIC_STRING
1041 template <typename CharT>
1042 struct ratio_string<kibi, CharT> :
1043 ratio_detail::ratio_string_static<kibi,CharT>
1044 {};
1045
1046 #else
1047 template <>
1048 struct ratio_string<kibi, char>
1049 {
1050 static std::string short_name() {return std::string("Ki");}
1051 static std::string long_name() {return std::string("kibi");}
1052 static std::string symbol() {return short_name();}
1053 static std::string prefix() {return long_name();}
1054 };
1055
1056 #if BOOST_RATIO_HAS_UNICODE_SUPPORT
1057
1058 template <>
1059 struct ratio_string<kibi, char16_t>
1060 {
1061 static std::u16string short_name() {return std::u16string(u"Ki");}
1062 static std::u16string long_name() {return std::u16string(u"kibi");}
1063 static std::u16string symbol() {return short_name();}
1064 static std::u16string prefix() {return long_name();}
1065 };
1066
1067 template <>
1068 struct ratio_string<kibi, char32_t>
1069 {
1070 static std::u32string short_name() {return std::u32string(U"Ki");}
1071 static std::u32string long_name() {return std::u32string(U"kibi");}
1072 static std::u32string symbol() {return short_name();}
1073 static std::u32string prefix() {return long_name();}
1074 };
1075
1076 #endif
1077
1078 #ifndef BOOST_NO_STD_WSTRING
1079 template <>
1080 struct ratio_string<kibi, wchar_t>
1081 {
1082 static std::wstring short_name() {return std::wstring(L"Ki");}
1083 static std::wstring long_name() {return std::wstring(L"kibi");}
1084 static std::wstring symbol() {return short_name();}
1085 static std::wstring prefix() {return long_name();}
1086 };
1087 #endif
1088 #endif
1089
1090 #ifdef BOOST_RATIO_HAS_STATIC_STRING
1091 template <typename CharT>
1092 struct ratio_string<mebi, CharT> :
1093 ratio_detail::ratio_string_static<mebi,CharT>
1094 {};
1095
1096 #else
1097 template <>
1098 struct ratio_string<mebi, char>
1099 {
1100 static std::string short_name() {return std::string("Mi");}
1101 static std::string long_name() {return std::string("mebi");}
1102 static std::string symbol() {return short_name();}
1103 static std::string prefix() {return long_name();}
1104 };
1105
1106 #if BOOST_RATIO_HAS_UNICODE_SUPPORT
1107
1108 template <>
1109 struct ratio_string<mebi, char16_t>
1110 {
1111 static std::u16string short_name() {return std::u16string(u"Mi");}
1112 static std::u16string long_name() {return std::u16string(u"mebi");}
1113 static std::u16string symbol() {return short_name();}
1114 static std::u16string prefix() {return long_name();}
1115 };
1116
1117 template <>
1118 struct ratio_string<mebi, char32_t>
1119 {
1120 static std::u32string short_name() {return std::u32string(U"Mi");}
1121 static std::u32string long_name() {return std::u32string(U"mebi");}
1122 static std::u32string symbol() {return short_name();}
1123 static std::u32string prefix() {return long_name();}
1124 };
1125
1126 #endif
1127
1128 #ifndef BOOST_NO_STD_WSTRING
1129 template <>
1130 struct ratio_string<mebi, wchar_t>
1131 {
1132 static std::wstring short_name() {return std::wstring(L"Mi");}
1133 static std::wstring long_name() {return std::wstring(L"mebi");}
1134 static std::wstring symbol() {return short_name();}
1135 static std::wstring prefix() {return long_name();}
1136 };
1137 #endif
1138 #endif
1139
1140 #ifdef BOOST_RATIO_HAS_STATIC_STRING
1141 template <typename CharT>
1142 struct ratio_string<gibi, CharT> :
1143 ratio_detail::ratio_string_static<gibi,CharT>
1144 {};
1145
1146 #else
1147 template <>
1148 struct ratio_string<gibi, char>
1149 {
1150 static std::string short_name() {return std::string("Gi");}
1151 static std::string long_name() {return std::string("gibi");}
1152 static std::string symbol() {return short_name();}
1153 static std::string prefix() {return long_name();}
1154 };
1155
1156 #if BOOST_RATIO_HAS_UNICODE_SUPPORT
1157
1158 template <>
1159 struct ratio_string<gibi, char16_t>
1160 {
1161 static std::u16string short_name() {return std::u16string(u"Gi");}
1162 static std::u16string long_name() {return std::u16string(u"gibi");}
1163 static std::u16string symbol() {return short_name();}
1164 static std::u16string prefix() {return long_name();}
1165 };
1166
1167 template <>
1168 struct ratio_string<gibi, char32_t>
1169 {
1170 static std::u32string short_name() {return std::u32string(U"Gi");}
1171 static std::u32string long_name() {return std::u32string(U"gibi");}
1172 static std::u32string symbol() {return short_name();}
1173 static std::u32string prefix() {return long_name();}
1174 };
1175
1176 #endif
1177
1178 #ifndef BOOST_NO_STD_WSTRING
1179 template <>
1180 struct ratio_string<gibi, wchar_t>
1181 {
1182 static std::wstring short_name() {return std::wstring(L"Gi");}
1183 static std::wstring long_name() {return std::wstring(L"gibi");}
1184 static std::wstring symbol() {return short_name();}
1185 static std::wstring prefix() {return long_name();}
1186 };
1187 #endif
1188 #endif
1189
1190 #ifdef BOOST_RATIO_HAS_STATIC_STRING
1191 template <typename CharT>
1192 struct ratio_string<tebi, CharT> :
1193 ratio_detail::ratio_string_static<tebi,CharT>
1194 {};
1195
1196 #else
1197 template <>
1198 struct ratio_string<tebi, char>
1199 {
1200 static std::string short_name() {return std::string("Ti");}
1201 static std::string long_name() {return std::string("tebi");}
1202 static std::string symbol() {return short_name();}
1203 static std::string prefix() {return long_name();}
1204 };
1205
1206 #if BOOST_RATIO_HAS_UNICODE_SUPPORT
1207
1208 template <>
1209 struct ratio_string<tebi, char16_t>
1210 {
1211 static std::u16string short_name() {return std::u16string(u"Ti");}
1212 static std::u16string long_name() {return std::u16string(u"tebi");}
1213 static std::u16string symbol() {return short_name();}
1214 static std::u16string prefix() {return long_name();}
1215 };
1216
1217 template <>
1218 struct ratio_string<tebi, char32_t>
1219 {
1220 static std::u32string short_name() {return std::u32string(U"Ti");}
1221 static std::u32string long_name() {return std::u32string(U"tebi");}
1222 static std::u32string symbol() {return short_name();}
1223 static std::u32string prefix() {return long_name();}
1224 };
1225
1226 #endif
1227
1228 #ifndef BOOST_NO_STD_WSTRING
1229 template <>
1230 struct ratio_string<tebi, wchar_t>
1231 {
1232 static std::wstring short_name() {return std::wstring(L"Ti");}
1233 static std::wstring long_name() {return std::wstring(L"tebi");}
1234 static std::wstring symbol() {return short_name();}
1235 static std::wstring prefix() {return long_name();}
1236 };
1237 #endif
1238 #endif
1239
1240 #ifdef BOOST_RATIO_HAS_STATIC_STRING
1241 template <typename CharT>
1242 struct ratio_string<pebi, CharT> :
1243 ratio_detail::ratio_string_static<pebi,CharT>
1244 {};
1245
1246 #else
1247 template <>
1248 struct ratio_string<pebi, char>
1249 {
1250 static std::string short_name() {return std::string("Pi");}
1251 static std::string long_name() {return std::string("pebi");}
1252 static std::string symbol() {return short_name();}
1253 static std::string prefix() {return long_name();}
1254 };
1255
1256 #if BOOST_RATIO_HAS_UNICODE_SUPPORT
1257
1258 template <>
1259 struct ratio_string<pebi, char16_t>
1260 {
1261 static std::u16string short_name() {return std::u16string(u"Pi");}
1262 static std::u16string long_name() {return std::u16string(u"pebi");}
1263 static std::u16string symbol() {return short_name();}
1264 static std::u16string prefix() {return long_name();}
1265 };
1266
1267 template <>
1268 struct ratio_string<pebi, char32_t>
1269 {
1270 static std::u32string short_name() {return std::u32string(U"Pi");}
1271 static std::u32string long_name() {return std::u32string(U"pebi");}
1272 static std::u32string symbol() {return short_name();}
1273 static std::u32string prefix() {return long_name();}
1274 };
1275
1276 #endif
1277
1278 #ifndef BOOST_NO_STD_WSTRING
1279 template <>
1280 struct ratio_string<pebi, wchar_t>
1281 {
1282 static std::wstring short_name() {return std::wstring(L"Pi");}
1283 static std::wstring long_name() {return std::wstring(L"pebi");}
1284 static std::wstring symbol() {return short_name();}
1285 static std::wstring prefix() {return long_name();}
1286 };
1287 #endif
1288 #endif
1289
1290 #ifdef BOOST_RATIO_HAS_STATIC_STRING
1291 template <typename CharT>
1292 struct ratio_string<exbi, CharT> :
1293 ratio_detail::ratio_string_static<exbi,CharT>
1294 {};
1295
1296 #else
1297 template <>
1298 struct ratio_string<exbi, char>
1299 {
1300 static std::string short_name() {return std::string("Ei");}
1301 static std::string long_name() {return std::string("exbi");}
1302 static std::string symbol() {return short_name();}
1303 static std::string prefix() {return long_name();}
1304 };
1305
1306 #if BOOST_RATIO_HAS_UNICODE_SUPPORT
1307
1308 template <>
1309 struct ratio_string<exbi, char16_t>
1310 {
1311 static std::u16string short_name() {return std::u16string(u"Ei");}
1312 static std::u16string long_name() {return std::u16string(u"exbi");}
1313 static std::u16string symbol() {return short_name();}
1314 static std::u16string prefix() {return long_name();}
1315 };
1316
1317 template <>
1318 struct ratio_string<exbi, char32_t>
1319 {
1320 static std::u32string short_name() {return std::u32string(U"Ei");}
1321 static std::u32string long_name() {return std::u32string(U"exbi");}
1322 static std::u32string symbol() {return short_name();}
1323 static std::u32string prefix() {return long_name();}
1324 };
1325
1326 #endif
1327
1328 #ifndef BOOST_NO_STD_WSTRING
1329 template <>
1330 struct ratio_string<exbi, wchar_t>
1331 {
1332 static std::wstring short_name() {return std::wstring(L"Ei");}
1333 static std::wstring long_name() {return std::wstring(L"exbi");}
1334 static std::wstring symbol() {return short_name();}
1335 static std::wstring prefix() {return long_name();}
1336 };
1337 #endif
1338 #endif
1339 #endif
1340 }
1341
1342 #endif // BOOST_RATIO_RATIO_IO_HPP