123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130 |
- // french.cpp ----------------------------------------------------------//
- // Copyright 2010 Howard Hinnant
- // Copyright 2011 Vicente J. Botet Escriba
- // Distributed under the Boost Software License, Version 1.0.
- // See http://www.boost.org/LICENSE_1_0.txt
- // Adapted to Boost from the original Hawards's code
- #include <boost/chrono/config.hpp>
- #include <boost/chrono/chrono_io.hpp>
- #include <boost/chrono/process_cpu_clocks.hpp>
- #include <boost/chrono/thread_clock.hpp>
- #include <iostream>
- #include <locale>
- #if BOOST_CHRONO_VERSION==2
- #include <boost/chrono/io/duration_units.hpp>
- using namespace boost;
- using namespace boost::chrono;
- template <typename CharT=char>
- class duration_units_fr: public duration_units_default<CharT>
- {
- public:
- typedef CharT char_type;
- explicit duration_units_fr(size_t refs = 0) :
- duration_units_default<CharT>(refs)
- {
- }
- protected:
- using duration_units_default<CharT>::do_get_unit;
- std::size_t do_get_plural_form(boost::int_least64_t value) const
- {
- return (value == -1 || value == 0 || value == 1) ? 0 : 1;
- }
- std::basic_string<CharT> do_get_unit(duration_style style, ratio<1> , std::size_t pf) const
- {
- static const CharT t[] =
- { 's' };
- static const std::basic_string<CharT> symbol(t, t + sizeof (t) / sizeof (t[0]));
- static const CharT u[] =
- { 's', 'e', 'c', 'o', 'n', 'd', 'e' };
- static const std::basic_string<CharT> singular(u, u + sizeof (u) / sizeof (u[0]));
- static const CharT v[] =
- { 's', 'e', 'c', 'o', 'n', 'd', 'e', 's' };
- static const std::basic_string<CharT> plural(v, v + sizeof (v) / sizeof (v[0]));
- if (style == duration_style::symbol) return symbol;
- if (pf == 0) return singular;
- if (pf == 1) return plural;
- // assert
- //throw "exception";
- return "";
- }
- std::basic_string<CharT> do_get_unit(duration_style style, ratio<60> , std::size_t pf) const
- {
- static const CharT t[] =
- { 'm', 'i', 'n' };
- static const std::basic_string<CharT> symbol(t, t + sizeof (t) / sizeof (t[0]));
- static const CharT u[] =
- { 'm', 'i', 'n', 'u', 't', 'e' };
- static const std::basic_string<CharT> singular(u, u + sizeof (u) / sizeof (u[0]));
- static const CharT v[] =
- { 'm', 'i', 'n', 'u', 't', 'e', 's' };
- static const std::basic_string<CharT> plural(v, v + sizeof (v) / sizeof (v[0]));
- if (style == duration_style::symbol) return symbol;
- if (pf == 0) return singular;
- if (pf == 1) return plural;
- // assert
- //throw "exception";
- return "";
- }
- std::basic_string<CharT> do_get_unit(duration_style style, ratio<3600> , std::size_t pf) const
- {
- static const CharT t[] =
- { 'h' };
- static const std::basic_string<CharT> symbol(t, t + sizeof (t) / sizeof (t[0]));
- static const CharT u[] =
- { 'h', 'e', 'u', 'r', 'e' };
- static const std::basic_string<CharT> singular(u, u + sizeof (u) / sizeof (u[0]));
- static const CharT v[] =
- { 'h', 'e', 'u', 'r', 'e', 's' };
- static const std::basic_string<CharT> plural(v, v + sizeof (v) / sizeof (v[0]));
- if (style == duration_style::symbol) return symbol;
- if (pf == 0) return singular;
- if (pf == 1) return plural;
- // assert
- //throw "exception";
- return "";
- }
- };
- #endif
- int main()
- {
- using std::cout;
- using std::locale;
- using namespace boost;
- using namespace boost::chrono;
- #if BOOST_CHRONO_VERSION==2
- cout.imbue(locale(locale(), new duration_units_fr<>()));
- #else
- cout.imbue(locale(locale(), new duration_punct<char>
- (
- duration_punct<char>::use_long,
- "secondes", "minutes", "heures",
- "s", "m", "h"
- )));
- #endif
- hours h(5);
- minutes m(45);
- seconds s(15);
- milliseconds ms(763);
- cout << h << ", " << m << ", " << s << " et " << ms << '\n';
- cout << hours(0) << ", " << minutes(0) << ", " << s << " et " << ms << '\n';
- return 0;
- }
|