123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543 |
- // 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/ratio.hpp>
- #include <string>
- #include <sstream>
- namespace boost {
- 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();
- }
- // atto
- template <>
- struct ratio_string<atto, char>
- {
- static std::string symbol() {return std::string(1, 'a');}
- static std::string prefix() {return std::string("atto");}
- };
- 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");}
- };
- 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");}
- };
- // femto
- template <>
- struct ratio_string<femto, char>
- {
- static std::string symbol() {return std::string(1, 'f');}
- static std::string prefix() {return std::string("femto");}
- };
- 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");}
- };
- 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");}
- };
- // pico
- template <>
- struct ratio_string<pico, char>
- {
- static std::string symbol() {return std::string(1, 'p');}
- static std::string prefix() {return std::string("pico");}
- };
- 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");}
- };
- 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");}
- };
- // nano
- template <>
- struct ratio_string<nano, char>
- {
- static std::string symbol() {return std::string(1, 'n');}
- static std::string prefix() {return std::string("nano");}
- };
- 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");}
- };
- 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");}
- };
- // micro
- template <>
- struct ratio_string<micro, char>
- {
- static std::string symbol() {return std::string("\xC2\xB5");}
- static std::string prefix() {return std::string("micro");}
- };
- 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");}
- };
- 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");}
- };
- // milli
- template <>
- struct ratio_string<milli, char>
- {
- static std::string symbol() {return std::string(1, 'm');}
- static std::string prefix() {return std::string("milli");}
- };
- 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");}
- };
- 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");}
- };
- // centi
- template <>
- struct ratio_string<centi, char>
- {
- static std::string symbol() {return std::string(1, 'c');}
- static std::string prefix() {return std::string("centi");}
- };
- 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");}
- };
- 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");}
- };
- // deci
- template <>
- struct ratio_string<deci, char>
- {
- static std::string symbol() {return std::string(1, 'd');}
- static std::string prefix() {return std::string("deci");}
- };
- 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");}
- };
- 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");}
- };
- // unit
- // deca
- template <>
- struct ratio_string<deca, char>
- {
- static std::string symbol() {return std::string("da");}
- static std::string prefix() {return std::string("deca");}
- };
- 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");}
- };
- 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");}
- };
- // hecto
- template <>
- struct ratio_string<hecto, char>
- {
- static std::string symbol() {return std::string(1, 'h');}
- static std::string prefix() {return std::string("hecto");}
- };
- 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");}
- };
- 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");}
- };
- // kilo
- template <>
- struct ratio_string<kilo, char>
- {
- static std::string symbol() {return std::string(1, 'k');}
- static std::string prefix() {return std::string("kilo");}
- };
- 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");}
- };
- 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");}
- };
- // mega
- template <>
- struct ratio_string<mega, char>
- {
- static std::string symbol() {return std::string(1, 'M');}
- static std::string prefix() {return std::string("mega");}
- };
- 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");}
- };
- 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");}
- };
- // giga
- template <>
- struct ratio_string<giga, char>
- {
- static std::string symbol() {return std::string(1, 'G');}
- static std::string prefix() {return std::string("giga");}
- };
- 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");}
- };
- 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");}
- };
- // tera
- template <>
- struct ratio_string<tera, char>
- {
- static std::string symbol() {return std::string(1, 'T');}
- static std::string prefix() {return std::string("tera");}
- };
- 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");}
- };
- 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");}
- };
- // peta
- template <>
- struct ratio_string<peta, char>
- {
- static std::string symbol() {return std::string(1, 'P');}
- static std::string prefix() {return std::string("peta");}
- };
- 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");}
- };
- 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");}
- };
- // exa
- template <>
- struct ratio_string<exa, char>
- {
- static std::string symbol() {return std::string(1, 'E');}
- static std::string prefix() {return std::string("exa");}
- };
- 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");}
- };
- 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 // BOOST_RATIO_RATIO_IO_HPP
|