123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824 |
- // ratio_io
- //
- // (C) Copyright Howard Hinnant
- // (C) Copyright 2010 Vicente J. Botet Escriba
- // Use, modification and distribution are subject to the Boost Software License,
- // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
- // http://www.boost.org/LICENSE_1_0.txt).
- //
- // This code was adapted by Vicente from Howard Hinnant's experimental work
- // on chrono i/o under lvm/libc++ to Boost
- #ifndef BOOST_RATIO_RATIO_IO_HPP
- #define BOOST_RATIO_RATIO_IO_HPP
- /*
- ratio_io synopsis
- #include <ratio>
- #include <string>
- namespace boost
- {
- template <class Ratio, class CharT>
- struct ratio_string
- {
- static basic_string<CharT> prefix();
- static basic_string<CharT> symbol();
- };
- } // boost
- */
- #include <boost/ratio/config.hpp>
- #ifdef BOOST_RATIO_PROVIDES_DEPRECATED_FEATURES_SINCE_V2_0_0
- #include <boost/ratio/detail/ratio_io.hpp>
- #else
- #include <boost/config.hpp>
- #include <boost/ratio/ratio.hpp>
- #include <boost/type_traits/integral_constant.hpp>
- #include <string>
- #include <sstream>
- #ifdef BOOST_RATIO_HAS_STATIC_STRING
- #include <boost/ratio/ratio_static_string.hpp>
- #include <boost/static_string/static_string.hpp>
- #endif
- #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)
- #if defined BOOST_RATIO_HAS_UNICODE_SUPPORT
- #undef BOOST_RATIO_HAS_UNICODE_SUPPORT
- #endif
- #else
- #define BOOST_RATIO_HAS_UNICODE_SUPPORT 1
- #endif
- namespace boost {
- //template <class Ratio>
- //struct ratio_string_is_localizable : false_type {};
- //template <class Ratio>
- //struct ratio_string_id : integral_constant<int,0> {};
- template <class Ratio, class CharT>
- struct ratio_string
- {
- static std::basic_string<CharT> symbol() {return prefix();}
- static std::basic_string<CharT> prefix();
- };
- template <class Ratio, class CharT>
- std::basic_string<CharT>
- ratio_string<Ratio, CharT>::prefix()
- {
- std::basic_ostringstream<CharT> os;
- os << CharT('[') << Ratio::num << CharT('/')
- << Ratio::den << CharT(']');
- return os.str();
- }
- #ifdef BOOST_RATIO_HAS_STATIC_STRING
- namespace ratio_detail {
- template <class Ratio, class CharT>
- struct ratio_string_static
- {
- static std::string symbol() {
- return std::basic_string<CharT>(
- static_string::c_str<
- typename ratio_static_string<Ratio, CharT>::symbol
- >::value);
- }
- static std::string prefix() {
- return std::basic_string<CharT>(
- static_string::c_str<
- typename ratio_static_string<Ratio, CharT>::prefix
- >::value);
- }
- };
- }
- #endif
- // atto
- //template <>
- //struct ratio_string_is_localizable<atto> : true_type {};
- //
- //template <>
- //struct ratio_string_id<atto> : integral_constant<int,-18> {};
- #ifdef BOOST_RATIO_HAS_STATIC_STRING
- template <typename CharT>
- struct ratio_string<atto, CharT> :
- ratio_detail::ratio_string_static<atto,CharT>
- {};
- #else
- template <>
- struct ratio_string<atto, char>
- {
- static std::string symbol() {return std::string(1, 'a');}
- static std::string prefix() {return std::string("atto");}
- };
- #if defined BOOST_RATIO_HAS_UNICODE_SUPPORT
- template <>
- struct ratio_string<atto, char16_t>
- {
- static std::u16string symbol() {return std::u16string(1, u'a');}
- static std::u16string prefix() {return std::u16string(u"atto");}
- };
- template <>
- struct ratio_string<atto, char32_t>
- {
- static std::u32string symbol() {return std::u32string(1, U'a');}
- static std::u32string prefix() {return std::u32string(U"atto");}
- };
- #endif
- #ifndef BOOST_NO_STD_WSTRING
- template <>
- struct ratio_string<atto, wchar_t>
- {
- static std::wstring symbol() {return std::wstring(1, L'a');}
- static std::wstring prefix() {return std::wstring(L"atto");}
- };
- #endif
- #endif
- // femto
- #ifdef BOOST_RATIO_HAS_STATIC_STRING
- template <typename CharT>
- struct ratio_string<femto, CharT> :
- ratio_detail::ratio_string_static<femto,CharT>
- {};
- #else
- template <>
- struct ratio_string<femto, char>
- {
- static std::string symbol() {return std::string(1, 'f');}
- static std::string prefix() {return std::string("femto");}
- };
- #if defined BOOST_RATIO_HAS_UNICODE_SUPPORT
- template <>
- struct ratio_string<femto, char16_t>
- {
- static std::u16string symbol() {return std::u16string(1, u'f');}
- static std::u16string prefix() {return std::u16string(u"femto");}
- };
- template <>
- struct ratio_string<femto, char32_t>
- {
- static std::u32string symbol() {return std::u32string(1, U'f');}
- static std::u32string prefix() {return std::u32string(U"femto");}
- };
- #endif
- #ifndef BOOST_NO_STD_WSTRING
- template <>
- struct ratio_string<femto, wchar_t>
- {
- static std::wstring symbol() {return std::wstring(1, L'f');}
- static std::wstring prefix() {return std::wstring(L"femto");}
- };
- #endif
- #endif
- // pico
- #ifdef BOOST_RATIO_HAS_STATIC_STRING
- template <typename CharT>
- struct ratio_string<pico, CharT> :
- ratio_detail::ratio_string_static<pico,CharT>
- {};
- #else
- template <>
- struct ratio_string<pico, char>
- {
- static std::string symbol() {return std::string(1, 'p');}
- static std::string prefix() {return std::string("pico");}
- };
- #if defined BOOST_RATIO_HAS_UNICODE_SUPPORT
- template <>
- struct ratio_string<pico, char16_t>
- {
- static std::u16string symbol() {return std::u16string(1, u'p');}
- static std::u16string prefix() {return std::u16string(u"pico");}
- };
- template <>
- struct ratio_string<pico, char32_t>
- {
- static std::u32string symbol() {return std::u32string(1, U'p');}
- static std::u32string prefix() {return std::u32string(U"pico");}
- };
- #endif
- #ifndef BOOST_NO_STD_WSTRING
- template <>
- struct ratio_string<pico, wchar_t>
- {
- static std::wstring symbol() {return std::wstring(1, L'p');}
- static std::wstring prefix() {return std::wstring(L"pico");}
- };
- #endif
- #endif
- // nano
- #ifdef BOOST_RATIO_HAS_STATIC_STRING
- template <typename CharT>
- struct ratio_string<nano, CharT> :
- ratio_detail::ratio_string_static<nano,CharT>
- {};
- #else
- template <>
- struct ratio_string<nano, char>
- {
- static std::string symbol() {return std::string(1, 'n');}
- static std::string prefix() {return std::string("nano");}
- };
- #if defined BOOST_RATIO_HAS_UNICODE_SUPPORT
- template <>
- struct ratio_string<nano, char16_t>
- {
- static std::u16string symbol() {return std::u16string(1, u'n');}
- static std::u16string prefix() {return std::u16string(u"nano");}
- };
- template <>
- struct ratio_string<nano, char32_t>
- {
- static std::u32string symbol() {return std::u32string(1, U'n');}
- static std::u32string prefix() {return std::u32string(U"nano");}
- };
- #endif
- #ifndef BOOST_NO_STD_WSTRING
- template <>
- struct ratio_string<nano, wchar_t>
- {
- static std::wstring symbol() {return std::wstring(1, L'n');}
- static std::wstring prefix() {return std::wstring(L"nano");}
- };
- #endif
- #endif
- // micro
- #ifdef BOOST_RATIO_HAS_STATIC_STRING
- template <typename CharT>
- struct ratio_string<micro, CharT> :
- ratio_detail::ratio_string_static<micro,CharT>
- {};
- #else
- template <>
- struct ratio_string<micro, char>
- {
- static std::string symbol() {return std::string("\xC2\xB5");}
- static std::string prefix() {return std::string("micro");}
- };
- #if defined BOOST_RATIO_HAS_UNICODE_SUPPORT
- template <>
- struct ratio_string<micro, char16_t>
- {
- static std::u16string symbol() {return std::u16string(1, u'\xB5');}
- static std::u16string prefix() {return std::u16string(u"micro");}
- };
- template <>
- struct ratio_string<micro, char32_t>
- {
- static std::u32string symbol() {return std::u32string(1, U'\xB5');}
- static std::u32string prefix() {return std::u32string(U"micro");}
- };
- #endif
- #ifndef BOOST_NO_STD_WSTRING
- template <>
- struct ratio_string<micro, wchar_t>
- {
- static std::wstring symbol() {return std::wstring(1, L'\xB5');}
- static std::wstring prefix() {return std::wstring(L"micro");}
- };
- #endif
- #endif
- // milli
- #ifdef BOOST_RATIO_HAS_STATIC_STRING
- template <typename CharT>
- struct ratio_string<milli, CharT> :
- ratio_detail::ratio_string_static<milli,CharT>
- {};
- #else
- template <>
- struct ratio_string<milli, char>
- {
- static std::string symbol() {return std::string(1, 'm');}
- static std::string prefix() {return std::string("milli");}
- };
- #if defined BOOST_RATIO_HAS_UNICODE_SUPPORT
- template <>
- struct ratio_string<milli, char16_t>
- {
- static std::u16string symbol() {return std::u16string(1, u'm');}
- static std::u16string prefix() {return std::u16string(u"milli");}
- };
- template <>
- struct ratio_string<milli, char32_t>
- {
- static std::u32string symbol() {return std::u32string(1, U'm');}
- static std::u32string prefix() {return std::u32string(U"milli");}
- };
- #endif
- #ifndef BOOST_NO_STD_WSTRING
- template <>
- struct ratio_string<milli, wchar_t>
- {
- static std::wstring symbol() {return std::wstring(1, L'm');}
- static std::wstring prefix() {return std::wstring(L"milli");}
- };
- #endif
- #endif
- // centi
- #ifdef BOOST_RATIO_HAS_STATIC_STRING
- template <typename CharT>
- struct ratio_string<centi, CharT> :
- ratio_detail::ratio_string_static<centi,CharT>
- {};
- #else
- template <>
- struct ratio_string<centi, char>
- {
- static std::string symbol() {return std::string(1, 'c');}
- static std::string prefix() {return std::string("centi");}
- };
- #if defined BOOST_RATIO_HAS_UNICODE_SUPPORT
- template <>
- struct ratio_string<centi, char16_t>
- {
- static std::u16string symbol() {return std::u16string(1, u'c');}
- static std::u16string prefix() {return std::u16string(u"centi");}
- };
- template <>
- struct ratio_string<centi, char32_t>
- {
- static std::u32string symbol() {return std::u32string(1, U'c');}
- static std::u32string prefix() {return std::u32string(U"centi");}
- };
- #endif
- #ifndef BOOST_NO_STD_WSTRING
- template <>
- struct ratio_string<centi, wchar_t>
- {
- static std::wstring symbol() {return std::wstring(1, L'c');}
- static std::wstring prefix() {return std::wstring(L"centi");}
- };
- #endif
- #endif
- // deci
- #ifdef BOOST_RATIO_HAS_STATIC_STRING
- template <typename CharT>
- struct ratio_string<deci, CharT> :
- ratio_detail::ratio_string_static<deci,CharT>
- {};
- #else
- template <>
- struct ratio_string<deci, char>
- {
- static std::string symbol() {return std::string(1, 'd');}
- static std::string prefix() {return std::string("deci");}
- };
- #if defined BOOST_RATIO_HAS_UNICODE_SUPPORT
- template <>
- struct ratio_string<deci, char16_t>
- {
- static std::u16string symbol() {return std::u16string(1, u'd');}
- static std::u16string prefix() {return std::u16string(u"deci");}
- };
- template <>
- struct ratio_string<deci, char32_t>
- {
- static std::u32string symbol() {return std::u32string(1, U'd');}
- static std::u32string prefix() {return std::u32string(U"deci");}
- };
- #endif
- #ifndef BOOST_NO_STD_WSTRING
- template <>
- struct ratio_string<deci, wchar_t>
- {
- static std::wstring symbol() {return std::wstring(1, L'd');}
- static std::wstring prefix() {return std::wstring(L"deci");}
- };
- #endif
- #endif
- // unit
- // deca
- #ifdef BOOST_RATIO_HAS_STATIC_STRING
- template <typename CharT>
- struct ratio_string<deca, CharT> :
- ratio_detail::ratio_string_static<deca,CharT>
- {};
- #else
- template <>
- struct ratio_string<deca, char>
- {
- static std::string symbol() {return std::string("da");}
- static std::string prefix() {return std::string("deca");}
- };
- #if defined BOOST_RATIO_HAS_UNICODE_SUPPORT
- template <>
- struct ratio_string<deca, char16_t>
- {
- static std::u16string symbol() {return std::u16string(u"da");}
- static std::u16string prefix() {return std::u16string(u"deca");}
- };
- template <>
- struct ratio_string<deca, char32_t>
- {
- static std::u32string symbol() {return std::u32string(U"da");}
- static std::u32string prefix() {return std::u32string(U"deca");}
- };
- #endif
- #ifndef BOOST_NO_STD_WSTRING
- template <>
- struct ratio_string<deca, wchar_t>
- {
- static std::wstring symbol() {return std::wstring(L"da");}
- static std::wstring prefix() {return std::wstring(L"deca");}
- };
- #endif
- #endif
- // hecto
- #ifdef BOOST_RATIO_HAS_STATIC_STRING
- template <typename CharT>
- struct ratio_string<hecto, CharT> :
- ratio_detail::ratio_string_static<hecto,CharT>
- {};
- #else
- template <>
- struct ratio_string<hecto, char>
- {
- static std::string symbol() {return std::string(1, 'h');}
- static std::string prefix() {return std::string("hecto");}
- };
- #if defined BOOST_RATIO_HAS_UNICODE_SUPPORT
- template <>
- struct ratio_string<hecto, char16_t>
- {
- static std::u16string symbol() {return std::u16string(1, u'h');}
- static std::u16string prefix() {return std::u16string(u"hecto");}
- };
- template <>
- struct ratio_string<hecto, char32_t>
- {
- static std::u32string symbol() {return std::u32string(1, U'h');}
- static std::u32string prefix() {return std::u32string(U"hecto");}
- };
- #endif
- #ifndef BOOST_NO_STD_WSTRING
- template <>
- struct ratio_string<hecto, wchar_t>
- {
- static std::wstring symbol() {return std::wstring(1, L'h');}
- static std::wstring prefix() {return std::wstring(L"hecto");}
- };
- #endif
- #endif
- // kilo
- #ifdef BOOST_RATIO_HAS_STATIC_STRING
- template <typename CharT>
- struct ratio_string<kilo, CharT> :
- ratio_detail::ratio_string_static<kilo,CharT>
- {};
- #else
- template <>
- struct ratio_string<kilo, char>
- {
- static std::string symbol() {return std::string(1, 'k');}
- static std::string prefix() {return std::string("kilo");}
- };
- #if defined BOOST_RATIO_HAS_UNICODE_SUPPORT
- template <>
- struct ratio_string<kilo, char16_t>
- {
- static std::u16string symbol() {return std::u16string(1, u'k');}
- static std::u16string prefix() {return std::u16string(u"kilo");}
- };
- template <>
- struct ratio_string<kilo, char32_t>
- {
- static std::u32string symbol() {return std::u32string(1, U'k');}
- static std::u32string prefix() {return std::u32string(U"kilo");}
- };
- #endif
- #ifndef BOOST_NO_STD_WSTRING
- template <>
- struct ratio_string<kilo, wchar_t>
- {
- static std::wstring symbol() {return std::wstring(1, L'k');}
- static std::wstring prefix() {return std::wstring(L"kilo");}
- };
- #endif
- #endif
- // mega
- #ifdef BOOST_RATIO_HAS_STATIC_STRING
- template <typename CharT>
- struct ratio_string<mega, CharT> :
- ratio_detail::ratio_string_static<mega,CharT>
- {};
- #else
- template <>
- struct ratio_string<mega, char>
- {
- static std::string symbol() {return std::string(1, 'M');}
- static std::string prefix() {return std::string("mega");}
- };
- #if defined BOOST_RATIO_HAS_UNICODE_SUPPORT
- template <>
- struct ratio_string<mega, char16_t>
- {
- static std::u16string symbol() {return std::u16string(1, u'M');}
- static std::u16string prefix() {return std::u16string(u"mega");}
- };
- template <>
- struct ratio_string<mega, char32_t>
- {
- static std::u32string symbol() {return std::u32string(1, U'M');}
- static std::u32string prefix() {return std::u32string(U"mega");}
- };
- #endif
- #ifndef BOOST_NO_STD_WSTRING
- template <>
- struct ratio_string<mega, wchar_t>
- {
- static std::wstring symbol() {return std::wstring(1, L'M');}
- static std::wstring prefix() {return std::wstring(L"mega");}
- };
- #endif
- #endif
- // giga
- #ifdef BOOST_RATIO_HAS_STATIC_STRING
- template <typename CharT>
- struct ratio_string<giga, CharT> :
- ratio_detail::ratio_string_static<giga,CharT>
- {};
- #else
- template <>
- struct ratio_string<giga, char>
- {
- static std::string symbol() {return std::string(1, 'G');}
- static std::string prefix() {return std::string("giga");}
- };
- #if defined BOOST_RATIO_HAS_UNICODE_SUPPORT
- template <>
- struct ratio_string<giga, char16_t>
- {
- static std::u16string symbol() {return std::u16string(1, u'G');}
- static std::u16string prefix() {return std::u16string(u"giga");}
- };
- template <>
- struct ratio_string<giga, char32_t>
- {
- static std::u32string symbol() {return std::u32string(1, U'G');}
- static std::u32string prefix() {return std::u32string(U"giga");}
- };
- #endif
- #ifndef BOOST_NO_STD_WSTRING
- template <>
- struct ratio_string<giga, wchar_t>
- {
- static std::wstring symbol() {return std::wstring(1, L'G');}
- static std::wstring prefix() {return std::wstring(L"giga");}
- };
- #endif
- #endif
- // tera
- //template <>
- #ifdef BOOST_RATIO_HAS_STATIC_STRING
- template <typename CharT>
- struct ratio_string<tera, CharT> :
- ratio_detail::ratio_string_static<tera,CharT>
- {};
- #else
- template <>
- struct ratio_string<tera, char>
- {
- static std::string symbol() {return std::string(1, 'T');}
- static std::string prefix() {return std::string("tera");}
- };
- #if defined BOOST_RATIO_HAS_UNICODE_SUPPORT
- template <>
- struct ratio_string<tera, char16_t>
- {
- static std::u16string symbol() {return std::u16string(1, u'T');}
- static std::u16string prefix() {return std::u16string(u"tera");}
- };
- template <>
- struct ratio_string<tera, char32_t>
- {
- static std::u32string symbol() {return std::u32string(1, U'T');}
- static std::u32string prefix() {return std::u32string(U"tera");}
- };
- #endif
- #ifndef BOOST_NO_STD_WSTRING
- template <>
- struct ratio_string<tera, wchar_t>
- {
- static std::wstring symbol() {return std::wstring(1, L'T');}
- static std::wstring prefix() {return std::wstring(L"tera");}
- };
- #endif
- #endif
- // peta
- #ifdef BOOST_RATIO_HAS_STATIC_STRING
- template <typename CharT>
- struct ratio_string<peta, CharT> :
- ratio_detail::ratio_string_static<peta,CharT>
- {};
- #else
- template <>
- struct ratio_string<peta, char>
- {
- static std::string symbol() {return std::string(1, 'P');}
- static std::string prefix() {return std::string("peta");}
- };
- #if defined BOOST_RATIO_HAS_UNICODE_SUPPORT
- template <>
- struct ratio_string<peta, char16_t>
- {
- static std::u16string symbol() {return std::u16string(1, u'P');}
- static std::u16string prefix() {return std::u16string(u"peta");}
- };
- template <>
- struct ratio_string<peta, char32_t>
- {
- static std::u32string symbol() {return std::u32string(1, U'P');}
- static std::u32string prefix() {return std::u32string(U"peta");}
- };
- #endif
- #ifndef BOOST_NO_STD_WSTRING
- template <>
- struct ratio_string<peta, wchar_t>
- {
- static std::wstring symbol() {return std::wstring(1, L'P');}
- static std::wstring prefix() {return std::wstring(L"peta");}
- };
- #endif
- #endif
- // exa
- #ifdef BOOST_RATIO_HAS_STATIC_STRING
- template <typename CharT>
- struct ratio_string<exa, CharT> :
- ratio_detail::ratio_string_static<exa,CharT>
- {};
- #else
- template <>
- struct ratio_string<exa, char>
- {
- static std::string symbol() {return std::string(1, 'E');}
- static std::string prefix() {return std::string("exa");}
- };
- #if defined BOOST_RATIO_HAS_UNICODE_SUPPORT
- template <>
- struct ratio_string<exa, char16_t>
- {
- static std::u16string symbol() {return std::u16string(1, u'E');}
- static std::u16string prefix() {return std::u16string(u"exa");}
- };
- template <>
- struct ratio_string<exa, char32_t>
- {
- static std::u32string symbol() {return std::u32string(1, U'E');}
- static std::u32string prefix() {return std::u32string(U"exa");}
- };
- #endif
- #ifndef BOOST_NO_STD_WSTRING
- template <>
- struct ratio_string<exa, wchar_t>
- {
- static std::wstring symbol() {return std::wstring(1, L'E');}
- static std::wstring prefix() {return std::wstring(L"exa");}
- };
- #endif
- #endif
- }
- #endif // BOOST_RATIO_PROVIDES_DEPRECATED_FEATURES_SINCE_V2_0_0
- #endif // BOOST_RATIO_RATIO_IO_HPP
|