Boost logo

Boost-Commit :

Subject: [Boost-commit] svn:boost r75241 - in trunk: boost/chrono/io libs/chrono/example
From: vicente.botet_at_[hidden]
Date: 2011-11-01 18:40:13


Author: viboes
Date: 2011-11-01 18:40:12 EDT (Tue, 01 Nov 2011)
New Revision: 75241
URL: http://svn.boost.org/trac/boost/changeset/75241

Log:
Chrono: Update french example to use the new facet.
Text files modified:
   trunk/boost/chrono/io/duration_units.hpp | 6 +-
   trunk/libs/chrono/example/french.cpp | 88 +++++++++++++++++++++++++++++++++++++++
   2 files changed, 89 insertions(+), 5 deletions(-)

Modified: trunk/boost/chrono/io/duration_units.hpp
==============================================================================
--- trunk/boost/chrono/io/duration_units.hpp (original)
+++ trunk/boost/chrono/io/duration_units.hpp 2011-11-01 18:40:12 EDT (Tue, 01 Nov 2011)
@@ -133,7 +133,7 @@
      * as the number of plural forms, the plural form associated to a duration,
      * the text associated to a plural form and a duration's period,
      */
- template <typename CharT, class OutputIterator = std::ostreambuf_iterator<CharT> >
+ template <typename CharT=char, class OutputIterator = std::ostreambuf_iterator<CharT> >
     class duration_units: public std::locale::facet
     {
     public:
@@ -317,7 +317,7 @@
 
     ///////////////////////////
     // This class is used to define the strings for the default English
- template <typename CharT, class OutputIterator = std::ostreambuf_iterator<CharT> >
+ template <typename CharT=char, class OutputIterator = std::ostreambuf_iterator<CharT> >
     class duration_units_default: public duration_units<CharT, OutputIterator>
     {
     public:
@@ -325,7 +325,7 @@
       typedef OutputIterator iter_type;
 
       explicit duration_units_default(size_t refs = 0) :
- duration_units<CharT> (refs)
+ duration_units<CharT, OutputIterator> (refs)
       {
       }
       bool swaps_value_unit_order() const

Modified: trunk/libs/chrono/example/french.cpp
==============================================================================
--- trunk/libs/chrono/example/french.cpp (original)
+++ trunk/libs/chrono/example/french.cpp 2011-11-01 18:40:12 EDT (Tue, 01 Nov 2011)
@@ -9,17 +9,96 @@
 
 
 #include <boost/chrono/config.hpp>
-#if defined BOOST_CHRONO_IO_V1_DONT_PROVIDE_DEPRECATED
+
+#if ! defined BOOST_CHRONO_USES_DURATION_PUT
 #undef BOOST_CHRONO_IO_V1_DONT_PROVIDE_DEPRECATED
 #undef BOOST_CHRONO_IO_USE_XALLOC
-
 #endif
+
 #include <boost/chrono/chrono_io.hpp>
 #include <boost/chrono/process_cpu_clocks.hpp>
 #include <boost/chrono/thread_clock.hpp>
 #include <iostream>
 #include <locale>
 
+#if defined BOOST_CHRONO_USES_DURATION_PUT
+#include <boost/chrono/io/duration_units.hpp>
+
+ using namespace boost;
+ using namespace boost::chrono;
+
+ template <typename CharT=char, class OutputIterator = std::ostreambuf_iterator<CharT> >
+ class duration_units_fr: public duration_units_default<CharT, OutputIterator>
+ {
+ public:
+ typedef CharT char_type;
+ typedef OutputIterator iter_type;
+
+ explicit duration_units_fr(size_t refs = 0) :
+ duration_units_default<CharT, OutputIterator>(refs)
+ {
+ }
+ protected:
+ std::basic_string<CharT> do_get_plural_form(duration_style_type 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";
+ }
+
+ std::basic_string<CharT> do_get_plural_form(duration_style_type 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";
+ }
+
+ std::basic_string<CharT> do_get_plural_form(duration_style_type 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";
+ }
+ };
+#endif
+
 int main()
 {
     using std::cout;
@@ -27,12 +106,17 @@
     using namespace boost;
     using namespace boost::chrono;
 
+#if defined BOOST_CHRONO_USES_DURATION_PUT
+ cout.imbue(locale(locale(), new duration_units_fr<>()));
+#else
+
     cout.imbue(locale(locale(), new duration_punct<char>
         (
             duration_style::prefix,
             "secondes", "minutes", "heures",
             "s", "m", "h"
         )));
+#endif
     hours h(5);
     minutes m(45);
     seconds s(15);


Boost-Commit list run by bdawes at acm.org, david.abrahams at rcn.com, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk