1 // french.cpp ----------------------------------------------------------//
3 // Copyright 2010 Howard Hinnant
4 // Copyright 2011 Vicente J. Botet Escriba
5 // Distributed under the Boost Software License, Version 1.0.
6 // See http://www.boost.org/LICENSE_1_0.txt
8 // Adapted to Boost from the original Hawards's code
11 #include <boost/chrono/config.hpp>
12 #include <boost/chrono/chrono_io.hpp>
13 #include <boost/chrono/process_cpu_clocks.hpp>
14 #include <boost/chrono/thread_clock.hpp>
19 #if BOOST_CHRONO_VERSION==2
20 #include <boost/chrono/io/duration_units.hpp>
22 using namespace boost;
23 using namespace boost::chrono;
25 template <typename CharT=char>
26 class duration_units_fr: public duration_units_default<CharT>
29 typedef CharT char_type;
31 explicit duration_units_fr(size_t refs = 0) :
32 duration_units_default<CharT>(refs)
37 using duration_units_default<CharT>::do_get_unit;
38 std::size_t do_get_plural_form(boost::int_least64_t value) const
40 return (value == -1 || value == 0 || value == 1) ? 0 : 1;
43 std::basic_string<CharT> do_get_unit(duration_style style, ratio<1> , std::size_t pf) const
45 static const CharT t[] =
47 static const std::basic_string<CharT> symbol(t, t + sizeof (t) / sizeof (t[0]));
48 static const CharT u[] =
49 { 's', 'e', 'c', 'o', 'n', 'd', 'e' };
50 static const std::basic_string<CharT> singular(u, u + sizeof (u) / sizeof (u[0]));
51 static const CharT v[] =
52 { 's', 'e', 'c', 'o', 'n', 'd', 'e', 's' };
53 static const std::basic_string<CharT> plural(v, v + sizeof (v) / sizeof (v[0]));
55 if (style == duration_style::symbol) return symbol;
56 if (pf == 0) return singular;
57 if (pf == 1) return plural;
63 std::basic_string<CharT> do_get_unit(duration_style style, ratio<60> , std::size_t pf) const
65 static const CharT t[] =
67 static const std::basic_string<CharT> symbol(t, t + sizeof (t) / sizeof (t[0]));
69 static const CharT u[] =
70 { 'm', 'i', 'n', 'u', 't', 'e' };
71 static const std::basic_string<CharT> singular(u, u + sizeof (u) / sizeof (u[0]));
72 static const CharT v[] =
73 { 'm', 'i', 'n', 'u', 't', 'e', 's' };
74 static const std::basic_string<CharT> plural(v, v + sizeof (v) / sizeof (v[0]));
76 if (style == duration_style::symbol) return symbol;
77 if (pf == 0) return singular;
78 if (pf == 1) return plural;
84 std::basic_string<CharT> do_get_unit(duration_style style, ratio<3600> , std::size_t pf) const
86 static const CharT t[] =
88 static const std::basic_string<CharT> symbol(t, t + sizeof (t) / sizeof (t[0]));
89 static const CharT u[] =
90 { 'h', 'e', 'u', 'r', 'e' };
91 static const std::basic_string<CharT> singular(u, u + sizeof (u) / sizeof (u[0]));
92 static const CharT v[] =
93 { 'h', 'e', 'u', 'r', 'e', 's' };
94 static const std::basic_string<CharT> plural(v, v + sizeof (v) / sizeof (v[0]));
96 if (style == duration_style::symbol) return symbol;
97 if (pf == 0) return singular;
98 if (pf == 1) return plural;
110 using namespace boost;
111 using namespace boost::chrono;
113 #if BOOST_CHRONO_VERSION==2
114 cout.imbue(locale(locale(), new duration_units_fr<>()));
116 cout.imbue(locale(locale(), new duration_punct<char>
118 duration_punct<char>::use_long,
119 "secondes", "minutes", "heures",
126 milliseconds ms(763);
127 cout << h << ", " << m << ", " << s << " et " << ms << '\n';
128 cout << hours(0) << ", " << minutes(0) << ", " << s << " et " << ms << '\n';