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).
9 // This code was adapted by Vicente from Howard Hinnant's experimental work
10 // on chrono i/o under lvm/libc++ to Boost
12 #ifndef BOOST_RATIO_DETAIL_RATIO_IO_HPP
13 #define BOOST_RATIO_DETAIL_RATIO_IO_HPP
25 template <class Ratio, class CharT>
28 static basic_string<CharT> short_name();
29 static basic_string<CharT> long_name();
36 #include <boost/config.hpp>
37 #include <boost/ratio/ratio.hpp>
38 #include <boost/type_traits/integral_constant.hpp>
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
47 #define BOOST_RATIO_HAS_UNICODE_SUPPORT 1
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> {};
57 template <class Ratio, class CharT>
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();}
66 template <class Ratio, class CharT>
67 std::basic_string<CharT>
68 ratio_string<Ratio, CharT>::long_name()
70 std::basic_ostringstream<CharT> os;
71 os << CharT('[') << Ratio::num << CharT('/')
72 << Ratio::den << CharT(']');
76 #ifdef BOOST_RATIO_HAS_STATIC_STRING
77 namespace ratio_detail {
78 template <class Ratio, class CharT>
79 struct ratio_string_static
81 static std::string short_name() {
82 return std::basic_string<CharT>(
84 typename ratio_static_string<Ratio, CharT>::short_name
87 static std::string long_name() {
88 return std::basic_string<CharT>(
90 typename ratio_static_string<Ratio, CharT>::long_name
93 static std::basic_string<CharT> symbol() {return short_name();}
94 static std::basic_string<CharT> prefix() {return long_name();}
100 //struct ratio_string_is_localizable<atto> : true_type {};
103 //struct ratio_string_id<atto> : integral_constant<int,-18> {};
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>
113 struct ratio_string<atto, char>
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();}
121 #if BOOST_RATIO_HAS_UNICODE_SUPPORT
124 struct ratio_string<atto, char16_t>
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();}
133 struct ratio_string<atto, char32_t>
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();}
143 #ifndef BOOST_NO_STD_WSTRING
145 struct ratio_string<atto, wchar_t>
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();}
158 //struct ratio_string_is_localizable<femto> : true_type {};
161 //struct ratio_string_id<femto> : integral_constant<int,-15> {};
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>
172 struct ratio_string<femto, char>
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();}
180 #if BOOST_RATIO_HAS_UNICODE_SUPPORT
183 struct ratio_string<femto, char16_t>
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();}
192 struct ratio_string<femto, char32_t>
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();}
202 #ifndef BOOST_NO_STD_WSTRING
204 struct ratio_string<femto, wchar_t>
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();}
217 //struct ratio_string_is_localizable<pico> : true_type {};
220 //struct ratio_string_id<pico> : integral_constant<int,-12> {};
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>
230 struct ratio_string<pico, char>
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();}
238 #if BOOST_RATIO_HAS_UNICODE_SUPPORT
241 struct ratio_string<pico, char16_t>
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();}
250 struct ratio_string<pico, char32_t>
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();}
260 #ifndef BOOST_NO_STD_WSTRING
262 struct ratio_string<pico, wchar_t>
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();}
275 //struct ratio_string_is_localizable<nano> : true_type {};
278 //struct ratio_string_id<nano> : integral_constant<int,-9> {};
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>
288 struct ratio_string<nano, char>
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();}
296 #if BOOST_RATIO_HAS_UNICODE_SUPPORT
299 struct ratio_string<nano, char16_t>
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();}
308 struct ratio_string<nano, char32_t>
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();}
318 #ifndef BOOST_NO_STD_WSTRING
320 struct ratio_string<nano, wchar_t>
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();}
333 //struct ratio_string_is_localizable<micro> : true_type {};
336 //struct ratio_string_id<micro> : integral_constant<int,-6> {};
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>
346 struct ratio_string<micro, char>
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();}
354 #if BOOST_RATIO_HAS_UNICODE_SUPPORT
357 struct ratio_string<micro, char16_t>
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();}
366 struct ratio_string<micro, char32_t>
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();}
376 #ifndef BOOST_NO_STD_WSTRING
378 struct ratio_string<micro, wchar_t>
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();}
391 //struct ratio_string_is_localizable<milli> : true_type {};
394 //struct ratio_string_id<milli> : integral_constant<int,-3> {};
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>
404 struct ratio_string<milli, char>
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();}
412 #if BOOST_RATIO_HAS_UNICODE_SUPPORT
415 struct ratio_string<milli, char16_t>
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();}
424 struct ratio_string<milli, char32_t>
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();}
434 #ifndef BOOST_NO_STD_WSTRING
436 struct ratio_string<milli, wchar_t>
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();}
449 //struct ratio_string_is_localizable<centi> : true_type {};
452 //struct ratio_string_id<centi> : integral_constant<int,-2> {};
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>
462 struct ratio_string<centi, char>
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();}
470 #if BOOST_RATIO_HAS_UNICODE_SUPPORT
473 struct ratio_string<centi, char16_t>
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();}
482 struct ratio_string<centi, char32_t>
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();}
492 #ifndef BOOST_NO_STD_WSTRING
494 struct ratio_string<centi, wchar_t>
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();}
507 //struct ratio_string_is_localizable<deci> : true_type {};
510 //struct ratio_string_id<deci> : integral_constant<int,-1> {};
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>
521 struct ratio_string<deci, char>
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();}
529 #if BOOST_RATIO_HAS_UNICODE_SUPPORT
532 struct ratio_string<deci, char16_t>
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();}
541 struct ratio_string<deci, char32_t>
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();}
551 #ifndef BOOST_NO_STD_WSTRING
553 struct ratio_string<deci, wchar_t>
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();}
566 //struct ratio_string_is_localizable<ratio<1> > : true_type {};
569 //struct ratio_string_id<ratio<1> > : integral_constant<int,0> {};
573 //struct ratio_string_is_localizable<deca> : true_type {};
576 //struct ratio_string_id<deca> : integral_constant<int,1> {};
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>
586 struct ratio_string<deca, char>
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();}
594 #if BOOST_RATIO_HAS_UNICODE_SUPPORT
597 struct ratio_string<deca, char16_t>
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();}
606 struct ratio_string<deca, char32_t>
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();}
616 #ifndef BOOST_NO_STD_WSTRING
618 struct ratio_string<deca, wchar_t>
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();}
631 //struct ratio_string_is_localizable<hecto> : true_type {};
634 //struct ratio_string_id<hecto> : integral_constant<int,2> {};
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>
645 struct ratio_string<hecto, char>
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();}
653 #if BOOST_RATIO_HAS_UNICODE_SUPPORT
656 struct ratio_string<hecto, char16_t>
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();}
665 struct ratio_string<hecto, char32_t>
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();}
675 #ifndef BOOST_NO_STD_WSTRING
677 struct ratio_string<hecto, wchar_t>
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();}
690 //struct ratio_string_is_localizable<kilo> : true_type {};
693 //struct ratio_string_id<kilo> : integral_constant<int,3> {};
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>
703 struct ratio_string<kilo, char>
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();}
711 #if BOOST_RATIO_HAS_UNICODE_SUPPORT
714 struct ratio_string<kilo, char16_t>
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();}
723 struct ratio_string<kilo, char32_t>
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();}
733 #ifndef BOOST_NO_STD_WSTRING
735 struct ratio_string<kilo, wchar_t>
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();}
748 //struct ratio_string_is_localizable<mega> : true_type {};
751 //struct ratio_string_id<mega> : integral_constant<int,6> {};
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>
762 struct ratio_string<mega, char>
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();}
770 #if BOOST_RATIO_HAS_UNICODE_SUPPORT
773 struct ratio_string<mega, char16_t>
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();}
782 struct ratio_string<mega, char32_t>
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();}
792 #ifndef BOOST_NO_STD_WSTRING
794 struct ratio_string<mega, wchar_t>
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();}
807 //struct ratio_string_is_localizable<giga> : true_type {};
810 //struct ratio_string_id<giga> : integral_constant<int,9> {};
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>
821 struct ratio_string<giga, char>
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();}
829 #if BOOST_RATIO_HAS_UNICODE_SUPPORT
832 struct ratio_string<giga, char16_t>
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();}
841 struct ratio_string<giga, char32_t>
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();}
851 #ifndef BOOST_NO_STD_WSTRING
853 struct ratio_string<giga, wchar_t>
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();}
866 //struct ratio_string_is_localizable<tera> : true_type {};
869 //struct ratio_string_id<tera> : integral_constant<int,12> {};
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>
879 struct ratio_string<tera, char>
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();}
887 #if BOOST_RATIO_HAS_UNICODE_SUPPORT
890 struct ratio_string<tera, char16_t>
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();}
899 struct ratio_string<tera, char32_t>
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();}
909 #ifndef BOOST_NO_STD_WSTRING
911 struct ratio_string<tera, wchar_t>
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();}
924 //struct ratio_string_is_localizable<peta> : true_type {};
927 //struct ratio_string_id<peta> : integral_constant<int,15> {};
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>
938 struct ratio_string<peta, char>
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();}
946 #if BOOST_RATIO_HAS_UNICODE_SUPPORT
949 struct ratio_string<peta, char16_t>
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();}
958 struct ratio_string<peta, char32_t>
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();}
968 #ifndef BOOST_NO_STD_WSTRING
970 struct ratio_string<peta, wchar_t>
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();}
983 //struct ratio_string_is_localizable<exa> : true_type {};
986 //struct ratio_string_id<exa> : integral_constant<int,18> {};
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>
996 struct ratio_string<exa, char>
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();}
1004 #if BOOST_RATIO_HAS_UNICODE_SUPPORT
1007 struct ratio_string<exa, char16_t>
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();}
1016 struct ratio_string<exa, char32_t>
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();}
1026 #ifndef BOOST_NO_STD_WSTRING
1028 struct ratio_string<exa, wchar_t>
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();}
1038 #ifdef BOOST_RATIO_EXTENSIONS
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>
1048 struct ratio_string<kibi, char>
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();}
1056 #if BOOST_RATIO_HAS_UNICODE_SUPPORT
1059 struct ratio_string<kibi, char16_t>
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();}
1068 struct ratio_string<kibi, char32_t>
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();}
1078 #ifndef BOOST_NO_STD_WSTRING
1080 struct ratio_string<kibi, wchar_t>
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();}
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>
1098 struct ratio_string<mebi, char>
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();}
1106 #if BOOST_RATIO_HAS_UNICODE_SUPPORT
1109 struct ratio_string<mebi, char16_t>
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();}
1118 struct ratio_string<mebi, char32_t>
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();}
1128 #ifndef BOOST_NO_STD_WSTRING
1130 struct ratio_string<mebi, wchar_t>
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();}
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>
1148 struct ratio_string<gibi, char>
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();}
1156 #if BOOST_RATIO_HAS_UNICODE_SUPPORT
1159 struct ratio_string<gibi, char16_t>
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();}
1168 struct ratio_string<gibi, char32_t>
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();}
1178 #ifndef BOOST_NO_STD_WSTRING
1180 struct ratio_string<gibi, wchar_t>
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();}
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>
1198 struct ratio_string<tebi, char>
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();}
1206 #if BOOST_RATIO_HAS_UNICODE_SUPPORT
1209 struct ratio_string<tebi, char16_t>
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();}
1218 struct ratio_string<tebi, char32_t>
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();}
1228 #ifndef BOOST_NO_STD_WSTRING
1230 struct ratio_string<tebi, wchar_t>
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();}
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>
1248 struct ratio_string<pebi, char>
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();}
1256 #if BOOST_RATIO_HAS_UNICODE_SUPPORT
1259 struct ratio_string<pebi, char16_t>
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();}
1268 struct ratio_string<pebi, char32_t>
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();}
1278 #ifndef BOOST_NO_STD_WSTRING
1280 struct ratio_string<pebi, wchar_t>
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();}
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>
1298 struct ratio_string<exbi, char>
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();}
1306 #if BOOST_RATIO_HAS_UNICODE_SUPPORT
1309 struct ratio_string<exbi, char16_t>
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();}
1318 struct ratio_string<exbi, char32_t>
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();}
1328 #ifndef BOOST_NO_STD_WSTRING
1330 struct ratio_string<exbi, wchar_t>
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();}
1342 #endif // BOOST_RATIO_RATIO_IO_HPP