Boost logo

Boost-Commit :

Subject: [Boost-commit] svn:boost r84372 - in sandbox/chrono_date: boost/chrono/date libs/date/perf libs/date/src
From: vicente.botet_at_[hidden]
Date: 2013-05-19 09:13:47


Author: viboes
Date: 2013-05-19 09:13:46 EDT (Sun, 19 May 2013)
New Revision: 84372
URL: http://svn.boost.org/trac/boost/changeset/84372

Log:
Chrono/Date: add constexpr for month_day and comment some dead code on rel_date.
Text files modified:
   sandbox/chrono_date/boost/chrono/date/tuples.hpp | 73 +++++++-
   sandbox/chrono_date/boost/chrono/date/ymd_date.hpp | 20 +-
   sandbox/chrono_date/libs/date/perf/serial_calendar_conversions.cpp | 357 +++++++++++++++++++++++++++++++--------
   sandbox/chrono_date/libs/date/src/rel_date.cpp | 154 ++++++++--------
   4 files changed, 435 insertions(+), 169 deletions(-)

Modified: sandbox/chrono_date/boost/chrono/date/tuples.hpp
==============================================================================
--- sandbox/chrono_date/boost/chrono/date/tuples.hpp (original)
+++ sandbox/chrono_date/boost/chrono/date/tuples.hpp 2013-05-19 09:13:46 EDT (Sun, 19 May 2013)
@@ -397,6 +397,12 @@
       {
         month m_;
         day d_;
+
+ BOOST_FORCEINLINE static BOOST_CHRONO_DATE_CONSTEXPR
+ bool is_valid_(month m, day d)
+ {
+ return (d<=m.days_in(true).count());
+ }
       public:
         BOOST_FORCEINLINE BOOST_CONSTEXPR month_day(month m, day d) BOOST_NOEXCEPT
         : m_(m),
@@ -421,6 +427,15 @@
         {
           return d_;
         }
+ /**
+ *
+ * @Returns whether the @c month()/day() is a valid proleptic Gregorian date.
+ */
+ // @todo BOOST_CONSTEXPR
+ BOOST_FORCEINLINE BOOST_CHRONO_DATE_CONSTEXPR bool is_valid() const BOOST_NOEXCEPT
+ {
+ return month(m_).is_valid() && day(d_).is_valid() && is_valid_(month(m_), day(d_));
+ }
       };
 
       BOOST_FORCEINLINE BOOST_CONSTEXPR month_day operator/(month m, day d) BOOST_NOEXCEPT
@@ -463,16 +478,40 @@
     {
       month m_;
       day d_;
+
+ BOOST_FORCEINLINE static BOOST_CHRONO_DATE_CONSTEXPR
+ bool is_valid_(month m, day d)
+ {
+ return (d<=m.days_in(true).count());
+ }
+
+#ifndef BOOST_NO_CXX11_CONSTEXPR
+ BOOST_FORCEINLINE static BOOST_CHRONO_DATE_CONSTEXPR
+ day check_invariants(month m, day d)
+ {
+ return is_valid_(m,d)
+ ? d
+ : throw bad_date("day " + to_string(d) + " is out of range for month " + to_string(m))
+ ;
+ }
+#else
+ BOOST_FORCEINLINE static
+ day check_invariants(month m, day d)
+ {
+ if ( is_valid_(m,d) )
+ return d;
+ else throw bad_date("day " + to_string(d) + " is out of range for month " + to_string(m));
+ }
+#endif
     public:
- BOOST_FORCEINLINE BOOST_CONSTEXPR month_day(month m, day d)BOOST_NOEXCEPT
+ BOOST_FORCEINLINE BOOST_CHRONO_DATE_CONSTEXPR month_day(month m, day d)
       : m_(m),
- d_(d)
+ d_(check_invariants(m,d))
       {
- // check validity of day relative to month.
       }
- BOOST_FORCEINLINE BOOST_CONSTEXPR month_day(month::rep m, day::rep d, check_t)
+ BOOST_FORCEINLINE BOOST_CHRONO_DATE_CONSTEXPR month_day(month::rep m, day::rep d, check_t)
       : m_(m),
- d_(d)
+ d_(check_invariants(month(m),day(d)))
       {
       }
 
@@ -482,9 +521,11 @@
       {
       }
 
- BOOST_FORCEINLINE BOOST_CONSTEXPR explicit month_day(unchecked::month_day md)
- : m_(unchecked::month(md)),
- d_(unchecked::day(md))
+ // conversions
+
+ BOOST_FORCEINLINE BOOST_CHRONO_DATE_CONSTEXPR explicit month_day(unchecked::month_day md)
+ : m_(unchecked::month(md),no_check),
+ d_(check_invariants(month(unchecked::month(md)), day(unchecked::day(md))))
       {
       }
 
@@ -493,6 +534,7 @@
         return unchecked::month_day(m_, d_);
       }
 
+ // Observers
       /**
        * @Return the month stored component.
        */
@@ -509,15 +551,26 @@
       {
         return d_;
       }
+
+ /**
+ *
+ * @Returns whether the @c month()/day() is a valid proleptic Gregorian date.
+ */
+ // @todo BOOST_CONSTEXPR
+ BOOST_FORCEINLINE BOOST_CONSTEXPR bool is_valid() const BOOST_NOEXCEPT
+ {
+ //return month(m_).is_valid() && day(d_).is_valid() && is_valid_(year(y_), month(m_), day(d_));
+ return true;
+ }
     };
 
- BOOST_FORCEINLINE BOOST_CONSTEXPR month_day operator/(month m, day d) BOOST_NOEXCEPT
+ BOOST_FORCEINLINE BOOST_CHRONO_DATE_CONSTEXPR month_day operator/(month m, day d) BOOST_NOEXCEPT
     {
       return month_day(m, d);
     }
 
 
- BOOST_FORCEINLINE BOOST_CONSTEXPR month_day operator/(day d, month m) BOOST_NOEXCEPT
+ BOOST_FORCEINLINE BOOST_CHRONO_DATE_CONSTEXPR month_day operator/(day d, month m) BOOST_NOEXCEPT
     {
       return month_day(m, d);
     }

Modified: sandbox/chrono_date/boost/chrono/date/ymd_date.hpp
==============================================================================
--- sandbox/chrono_date/boost/chrono/date/ymd_date.hpp (original)
+++ sandbox/chrono_date/boost/chrono/date/ymd_date.hpp 2013-05-19 09:13:46 EDT (Sun, 19 May 2013)
@@ -189,6 +189,7 @@
   #endif
         {
         }
+
         /**
          * @Effects @c tp is converted to UTC, and then truncated to 00:00:00 hours.
          * A ymd_date is created which reflects this point in time.
@@ -465,11 +466,11 @@
           return *this += years(-y.count());
         }
 
- friend BOOST_FORCEINLINE BOOST_CONSTEXPR bool operator==(const ymd_date& x, const ymd_date& y) BOOST_NOEXCEPT;
- friend BOOST_FORCEINLINE BOOST_CONSTEXPR bool operator< (const ymd_date& x, const ymd_date& y) BOOST_NOEXCEPT;
 
   #if ! defined BOOST_CHRONO_DATE_DOXYGEN_INVOKED
       private:
+ friend BOOST_FORCEINLINE BOOST_CONSTEXPR bool operator==(const ymd_date& x, const ymd_date& y) BOOST_NOEXCEPT;
+ friend BOOST_FORCEINLINE BOOST_CONSTEXPR bool operator< (const ymd_date& x, const ymd_date& y) BOOST_NOEXCEPT;
 
         days::rep day_number_from_ymd() const BOOST_NOEXCEPT;
   #endif
@@ -721,7 +722,7 @@
       BOOST_FORCEINLINE static BOOST_CHRONO_DATE_CONSTEXPR
       bool is_valid_(year_month ym, day d)
       {
- return d < ym.days_in().count();
+ return d <= ym.days_in().count();
       }
 
 #ifndef BOOST_NO_CXX11_CONSTEXPR
@@ -968,9 +969,10 @@
        * @Returns whether the @c year()/month()/day() is a valid proleptic Gregorian date.
        */
       // @todo BOOST_CONSTEXPR
- BOOST_FORCEINLINE BOOST_CHRONO_DATE_CONSTEXPR bool is_valid() const BOOST_NOEXCEPT
+ BOOST_FORCEINLINE BOOST_CONSTEXPR bool is_valid() const BOOST_NOEXCEPT
       {
- return month(m_).is_valid() && unchecked::day(d_).is_valid() && is_valid_(year(y_), month(m_), day(d_, no_check));
+ //return month(m_).is_valid() && unchecked::day(d_).is_valid() && is_valid_(year(y_), month(m_), day(d_, no_check));
+ return true;
       }
 
 //#if ! defined BOOST_CHRONO_DATE_DOXYGEN_INVOKED
@@ -1058,7 +1060,7 @@
       }
       BOOST_FORCEINLINE BOOST_CONSTEXPR operator chrono::month_day() const BOOST_NOEXCEPT
       {
- return chrono::month_day(chrono::month(m_, no_check), chrono::day(d_, no_check));
+ return chrono::month_day(chrono::month(m_, no_check), chrono::day(d_, no_check), no_check);
       }
       BOOST_FORCEINLINE BOOST_CONSTEXPR operator chrono::year_month() const BOOST_NOEXCEPT
       {
@@ -1240,12 +1242,10 @@
         return *this += years(-y.count());
       }
 
- friend BOOST_FORCEINLINE BOOST_CONSTEXPR bool operator==(const ymd_date& x, const ymd_date& y) BOOST_NOEXCEPT;
- friend BOOST_FORCEINLINE BOOST_CONSTEXPR bool operator< (const ymd_date& x, const ymd_date& y) BOOST_NOEXCEPT;
-
-
 #if ! defined BOOST_CHRONO_DATE_DOXYGEN_INVOKED
     private:
+ friend BOOST_FORCEINLINE BOOST_CONSTEXPR bool operator==(const ymd_date& x, const ymd_date& y) BOOST_NOEXCEPT;
+ friend BOOST_FORCEINLINE BOOST_CONSTEXPR bool operator< (const ymd_date& x, const ymd_date& y) BOOST_NOEXCEPT;
 
       days::rep day_number_from_ymd() const BOOST_NOEXCEPT;
 #endif

Modified: sandbox/chrono_date/libs/date/perf/serial_calendar_conversions.cpp
==============================================================================
--- sandbox/chrono_date/libs/date/perf/serial_calendar_conversions.cpp (original)
+++ sandbox/chrono_date/libs/date/perf/serial_calendar_conversions.cpp 2013-05-19 09:13:46 EDT (Sun, 19 May 2013)
@@ -8,19 +8,14 @@
 
 using namespace boost::chrono;
 const int Ymin = 1900;
-const int Ymax = 2100;
+const int Ymax = 4100;
 volatile int y;
 volatile int m;
 volatile int d;
 volatile boost::int_least16_t m16;
 volatile boost::int_least16_t d16;
 
-//#define VOLATILE
-//#define CHECK_IS_VALID(d) if(d.is_valid())
-
-#define VOLATILE volatile
-#define CHECK_IS_VALID(d)
-
+#if 0
 void empty_unchecked_ymd_dcl()
 {
   int count = 0;
@@ -34,12 +29,73 @@
       int last = unchecked::month(m).days_in(is_l).count();
       for (int d = 1; d <= last; ++d)
       {
- unchecked::ymd_date dt=unchecked::ymd_date(
- year(y),
+ unchecked::ymd_date dt;
+ ycount+= unchecked::day(dt);
+ ++count;
+ }
+ }
+ }
+ auto t1 = boost::chrono::high_resolution_clock::now();
+ typedef boost::chrono::duration<float, boost::nano> sec;
+ auto encode = t1 - t0;
+ std::cout << "default unchecked calendar " << sec(encode).count() / count << " " << ycount << '\n';
+}
+
+void empty_checked_ymd_dcl()
+{
+ int count = 0;
+ int ycount = 0;
+ auto t0 = boost::chrono::high_resolution_clock::now();
+ for (int y = Ymin; y <= Ymax; ++y)
+ {
+ bool is_l = year(y).is_leap();
+ for (int m = 1; m <= 12; ++m)
+ {
+ int last = unchecked::month(m).days_in(is_l).count();
+ for (int d = 1; d <= last; ++d)
+ {
+ ymd_date dt;
+ ycount+= day(dt);
+ ++count;
+ }
+ }
+ }
+ auto t1 = boost::chrono::high_resolution_clock::now();
+ typedef boost::chrono::duration<float, boost::nano> sec;
+ auto encode = t1 - t0;
+ std::cout << "default checked calendar " << sec(encode).count() / count << " " << ycount << '\n';
+}
+#endif
+void unchecked_ymd_dcl()
+{
+ int count = 0;
+ int ycount = 0;
+ auto t0 = boost::chrono::high_resolution_clock::now();
+ for (int y = Ymin; y <= Ymax; ++y)
+ {
+ bool is_l = year(y).is_leap();
+ for (int m = 1; m <= 12; ++m)
+ {
+ int last = unchecked::month(m).days_in(is_l).count();
+ for (int d = 1; d <= last; ++d)
+ {
+#if 1
+ unchecked::ymd_date dt(
+ (year(y)),
             unchecked::month(m),
             unchecked::day(d)
         );
- ycount+= unchecked::day(dt);
+ ycount+= unchecked::day(dt)+unchecked::month(dt)+year(dt);
+#else
+ //ymd_date dt((year(y)), month(m), day(d));
+ //ymd_date dt((year(y)), month(m), day(d, no_check));
+ //ymd_date dt((year(y)), month(m, no_check), day(d));
+ //ymd_date dt((year(y)), month(m, no_check), day(d, no_check));
+ //ymd_date dt((year(y)), month(m, no_check), day(d, no_check), no_check);
+ ymd_date dt((year(y)), month_day(month(m, no_check), day(d, no_check), no_check));
+ //ymd_date dt((year_month(year(y), month(m, no_check))), day(d, no_check));
+ ycount+= day(dt)+month(dt)+year(dt);
+#endif
         ++count;
       }
     }
@@ -49,7 +105,9 @@
   auto encode = t1 - t0;
   std::cout << "unchecked calendar " << sec(encode).count() / count << " " << ycount << '\n';
 }
-void empty_checked_ymd_dcl()
+#if 0
+
+void checked_month_ymd_dcl()
 {
   int count = 0;
   int ycount = 0;
@@ -59,10 +117,64 @@
     bool is_l = year(y).is_leap();
     for (int m = 1; m <= 12; ++m)
     {
- int last = month(m).days_in(is_l).count();
+ int last = unchecked::month(m).days_in(is_l).count();
+ for (int d = 1; d <= last; ++d)
+ {
+ ymd_date dt((year(y)), month(m), day(d));
+ //ymd_date dt((year(y)), month(m), day(d, no_check));
+ //ymd_date dt((year(y)), month(m, no_check), day(d));
+ //ymd_date dt((year(y)), month(m, no_check), day(d, no_check));
+ ycount+= day(dt);
+ ++count;
+ }
+ }
+ }
+ auto t1 = boost::chrono::high_resolution_clock::now();
+ typedef boost::chrono::duration<float, boost::nano> sec;
+ auto encode = t1 - t0;
+ std::cout << "checked month calendar " << sec(encode).count() / count << " " << ycount << '\n';
+}
+void checked_ymd_dcl()
+{
+ int count = 0;
+ int ycount = 0;
+ auto t0 = boost::chrono::high_resolution_clock::now();
+ for (int y = Ymin; y <= Ymax; ++y)
+ {
+ bool is_l = year(y).is_leap();
+ for (int m = 1; m <= 12; ++m)
+ {
+ int last = unchecked::month(m).days_in(is_l).count();
+ for (int d = 1; d <= last; ++d)
+ {
+ ymd_date dt((year(y)), month(m), day(d));
+ ycount+= day(dt);
+ ++count;
+ }
+ }
+ }
+ auto t1 = boost::chrono::high_resolution_clock::now();
+ typedef boost::chrono::duration<float, boost::nano> sec;
+ auto encode = t1 - t0;
+ std::cout << "checked month/day calendar " << sec(encode).count() / count << " " << ycount << '\n';
+}
+void checked_day_ymd_dcl()
+{
+ int count = 0;
+ int ycount = 0;
+ auto t0 = boost::chrono::high_resolution_clock::now();
+ for (int y = Ymin; y <= Ymax; ++y)
+ {
+ bool is_l = year(y).is_leap();
+ for (int m = 1; m <= 12; ++m)
+ {
+ int last = unchecked::month(m).days_in(is_l).count();
+ //month pm(m, no_check);
       for (int d = 1; d <= last; ++d)
       {
- ymd_date dt = ymd_date(year(y), month(m), day(d));
+ //ymd_date dt((year(y)), month(m, no_check), day(d));
+ ymd_date dt((year(y)), month(m), day(d));
+ //ymd_date dt((year(y)), pm, day(d));
         ycount+= day(dt);
         ++count;
       }
@@ -71,10 +183,10 @@
   auto t1 = boost::chrono::high_resolution_clock::now();
   typedef boost::chrono::duration<float, boost::nano> sec;
   auto encode = t1 - t0;
- std::cout << "checked calendar " << sec(encode).count() / count << " " << ycount << '\n';
+ std::cout << "checked day calendar " << sec(encode).count() / count << " " << ycount << '\n';
 }
 
-void empty_encoding_perf()
+void checked_unchecked_ymd_dcl()
 {
   int count = 0;
   int ycount = 0;
@@ -84,10 +196,38 @@
     bool is_l = year(y).is_leap();
     for (int m = 1; m <= 12; ++m)
     {
- int last = month(m).days_in(is_l).count();
+ int last = unchecked::month(m).days_in(is_l).count();
+ for (int d = 1; d <= last; ++d)
+ {
+ ymd_date dt((year(y)), month(m), day(d));
+ unchecked::ymd_date dt2 = dt;
+ ycount+= unchecked::day(dt2);
+ ++count;
+ }
+ }
+ }
+ auto t1 = boost::chrono::high_resolution_clock::now();
+ typedef boost::chrono::duration<float, boost::nano> sec;
+ auto encode = t1 - t0;
+ std::cout << "calendar -> unchecked calendar " << sec(encode).count() / count << " " << ycount << '\n';
+}
+
+void unchecked_checked_ymd_dcl()
+{
+ int count = 0;
+ int ycount = 0;
+ auto t0 = boost::chrono::high_resolution_clock::now();
+ for (int y = Ymin; y <= Ymax; ++y)
+ {
+ bool is_l = year(y).is_leap();
+ for (int m = 1; m <= 12; ++m)
+ {
+ int last = unchecked::month(m).days_in(is_l).count();
       for (int d = 1; d <= last; ++d)
       {
- ycount+= d;
+ unchecked::ymd_date dt((year(y)), unchecked::month(m), unchecked::day(d));
+ ymd_date dt2(dt);
+ ycount+= day(dt2);
         ++count;
       }
     }
@@ -95,7 +235,7 @@
   auto t1 = boost::chrono::high_resolution_clock::now();
   typedef boost::chrono::duration<float, boost::nano> sec;
   auto encode = t1 - t0;
- std::cout << "ymd empty loop " << sec(encode).count() / count << " " << ycount << '\n';
+ std::cout << "unchecked calendar -> calendar " << sec(encode).count() / count << " " << ycount << '\n';
 }
 
 void raw_encoding_perf()
@@ -394,63 +534,136 @@
   auto encode = t1 - t0;
   std::cout << "unchecked calendar -> serial -> unchecked calendar " << sec(encode).count() / count << " " << ycount <<" " << count <<" " << y2count << '\n';
 }
+#endif
 
 int main()
 {
- empty_encoding_perf();
- empty_checked_ymd_dcl();
- empty_unchecked_ymd_dcl();
- empty_encoding_perf();
- raw_encoding_perf();
- raw_space_encoding_perf();
- class_encoding_perf();
- empty_decoding_perf();
- raw_decoding_perf();
- raw_space_decoding_perf();
- class_decoding_perf();
- class_decoding_encoding_perf();
- unchecked_class_decoding_perf();
- unchecked_class_decoding_encoding_perf();
- class_decoding_perf();
- class_decoding_encoding_perf();
-
- empty_encoding_perf();
- empty_checked_ymd_dcl();
- empty_unchecked_ymd_dcl();
- empty_encoding_perf();
- raw_encoding_perf();
- raw_space_encoding_perf();
- class_encoding_perf();
- empty_decoding_perf();
- raw_decoding_perf();
- raw_space_decoding_perf();
- class_decoding_perf();
- class_decoding_encoding_perf();
- unchecked_class_decoding_perf();
- unchecked_class_decoding_encoding_perf();
- class_decoding_perf();
- class_decoding_encoding_perf();
- class_decoding_encoding_perf();
- class_decoding_encoding_perf();
- class_decoding_encoding_perf();
- class_decoding_encoding_perf();
- unchecked_class_decoding_encoding_perf();
- unchecked_class_decoding_encoding_perf();
- unchecked_class_decoding_encoding_perf();
- unchecked_class_decoding_encoding_perf();
- unchecked_class_decoding_encoding_perf();
- unchecked_class_decoding_encoding_perf();
-
- class_encoding_decoding_perf();
- class_encoding_decoding_perf();
- class_encoding_decoding_perf();
- class_encoding_decoding_perf();
- class_encoding_decoding_perf();
- unchecked_class_encoding_decoding_perf();
- unchecked_class_encoding_decoding_perf();
- unchecked_class_encoding_decoding_perf();
- unchecked_class_encoding_decoding_perf();
- unchecked_class_encoding_decoding_perf();
+// empty_checked_ymd_dcl();
+// empty_checked_ymd_dcl();
+// empty_checked_ymd_dcl();
+// empty_checked_ymd_dcl();
+// empty_checked_ymd_dcl();
+// empty_unchecked_ymd_dcl();
+// empty_unchecked_ymd_dcl();
+// empty_unchecked_ymd_dcl();
+// empty_unchecked_ymd_dcl();
+// empty_unchecked_ymd_dcl();
+// checked_day_ymd_dcl();
+// checked_day_ymd_dcl();
+// checked_day_ymd_dcl();
+// checked_day_ymd_dcl();
+// checked_day_ymd_dcl();
+// checked_ymd_dcl();
+// checked_ymd_dcl();
+// checked_ymd_dcl();
+// checked_ymd_dcl();
+// checked_ymd_dcl();
+// checked_ymd_dcl();
+// checked_ymd_dcl();
+// checked_ymd_dcl();
+// checked_ymd_dcl();
+// checked_ymd_dcl();
+// checked_day_ymd_dcl();
+// checked_day_ymd_dcl();
+// checked_day_ymd_dcl();
+// checked_day_ymd_dcl();
+// checked_day_ymd_dcl();
+// checked_month_ymd_dcl();
+// checked_month_ymd_dcl();
+// checked_month_ymd_dcl();
+// checked_month_ymd_dcl();
+// checked_month_ymd_dcl();
+ unchecked_ymd_dcl();
+ unchecked_ymd_dcl();
+ unchecked_ymd_dcl();
+ unchecked_ymd_dcl();
+ unchecked_ymd_dcl();
+ unchecked_ymd_dcl();
+ unchecked_ymd_dcl();
+ unchecked_ymd_dcl();
+ unchecked_ymd_dcl();
+ unchecked_ymd_dcl();
+ unchecked_ymd_dcl();
+ unchecked_ymd_dcl();
+ unchecked_ymd_dcl();
+ unchecked_ymd_dcl();
+ unchecked_ymd_dcl();
+ unchecked_ymd_dcl();
+ unchecked_ymd_dcl();
+ unchecked_ymd_dcl();
+ unchecked_ymd_dcl();
+ unchecked_ymd_dcl();
+// checked_unchecked_ymd_dcl();
+// checked_unchecked_ymd_dcl();
+// checked_unchecked_ymd_dcl();
+// checked_unchecked_ymd_dcl();
+// checked_unchecked_ymd_dcl();
+// unchecked_checked_ymd_dcl();
+// unchecked_checked_ymd_dcl();
+// unchecked_checked_ymd_dcl();
+// unchecked_checked_ymd_dcl();
+// unchecked_checked_ymd_dcl();
+// empty_checked_ymd_dcl();
+// empty_unchecked_ymd_dcl();
+// checked_ymd_dcl();
+// unchecked_ymd_dcl();
+// checked_unchecked_ymd_dcl();
+// raw_encoding_perf();
+// raw_space_encoding_perf();
+// class_encoding_perf();
+// empty_decoding_perf();
+// raw_decoding_perf();
+// raw_space_decoding_perf();
+// class_decoding_perf();
+// class_decoding_encoding_perf();
+// unchecked_class_decoding_perf();
+// unchecked_class_decoding_encoding_perf();
+// class_decoding_perf();
+// class_decoding_encoding_perf();
+//
+// empty_checked_ymd_dcl();
+// empty_unchecked_ymd_dcl();
+// checked_ymd_dcl();
+// unchecked_ymd_dcl();
+// checked_unchecked_ymd_dcl();
+// empty_checked_ymd_dcl();
+// empty_unchecked_ymd_dcl();
+// checked_ymd_dcl();
+// unchecked_ymd_dcl();
+// checked_unchecked_ymd_dcl();
+// raw_encoding_perf();
+// raw_space_encoding_perf();
+// class_encoding_perf();
+// empty_decoding_perf();
+// raw_decoding_perf();
+// raw_space_decoding_perf();
+// class_decoding_perf();
+// class_decoding_encoding_perf();
+// unchecked_class_decoding_perf();
+// unchecked_class_decoding_encoding_perf();
+// class_decoding_perf();
+// class_decoding_encoding_perf();
+// class_decoding_encoding_perf();
+// class_decoding_encoding_perf();
+// class_decoding_encoding_perf();
+// class_decoding_encoding_perf();
+// unchecked_class_decoding_encoding_perf();
+// unchecked_class_decoding_encoding_perf();
+// unchecked_class_decoding_encoding_perf();
+// unchecked_class_decoding_encoding_perf();
+// unchecked_class_decoding_encoding_perf();
+// unchecked_class_decoding_encoding_perf();
+//
+// class_encoding_decoding_perf();
+// class_encoding_decoding_perf();
+// class_encoding_decoding_perf();
+// class_encoding_decoding_perf();
+// class_encoding_decoding_perf();
+// unchecked_class_encoding_decoding_perf();
+// unchecked_class_encoding_decoding_perf();
+// unchecked_class_encoding_decoding_perf();
+// unchecked_class_encoding_decoding_perf();
+// unchecked_class_encoding_decoding_perf();
   return 1;
 }
 

Modified: sandbox/chrono_date/libs/date/src/rel_date.cpp
==============================================================================
--- sandbox/chrono_date/libs/date/src/rel_date.cpp (original)
+++ sandbox/chrono_date/libs/date/src/rel_date.cpp 2013-05-19 09:13:46 EDT (Sun, 19 May 2013)
@@ -686,7 +686,7 @@
     m_(m.value()),
     dow_(weekday(d)),
     d_(0),
- n_(d.nth_weekday())
+ n_(nth_week(d))
     {
       leap_ = chrono::year(y_).is_leap();
       const day_of_year::rep* year_data = days_in_year_before(leap_);
@@ -763,7 +763,7 @@
 #elif BOOST_CHRONO_DATE_REL_DATE_DESIGN == 2
 
     rel_date::rel_date(year y, chrono::month m, nth_weekday nwd) :
- n_(nwd.nth_weekday()), dow_(weekday(nwd))
+ n_(nth_week(nwd)), dow_(weekday(nwd))
     {
       bool leap = y.is_leap();
       const day_of_year::rep* year_data = days_in_year_before(leap);
@@ -862,25 +862,25 @@
 
       leap_ = chrono::year(y).is_leap();
       const day_of_year::rep* year_data = days_in_year_before(leap_);
- if (n_ != nth_week::not_applicable) // if a nth is involved
+// if (n_ != nth_week::not_applicable) // if a nth is involved
 
       {
- if (dow_ == weekday::not_applicable) // if we want nth day of month
-
- {
- if (n_ == last.value_) // want last day of month
-
- {
- d_ = year_data[m_] - year_data[m_-1];
- std::cout <<" =========== d= "<< int(d_) << std::endl;
- }
- else
- {
- d_ = n_; // want nth day of month
- std::cout <<" =========== d= "<< int(d_) << std::endl;
- }
- }
- else // we want nth weekday of month
+// if (dow_ == weekday::not_applicable) // if we want nth day of month
+//
+// {
+// if (n_ == last.value_) // want last day of month
+//
+// {
+// d_ = year_data[m_] - year_data[m_-1];
+// std::cout <<" =========== d= "<< int(d_) << std::endl;
+// }
+// else
+// {
+// d_ = n_; // want nth day of month
+// std::cout <<" =========== d= "<< int(d_) << std::endl;
+// }
+// }
+// else // we want nth weekday of month
 
         {
           // dow_ = [0 - 5] 0 means last
@@ -925,13 +925,13 @@
           std::cout <<" =========== d= "<< int(d_) << std::endl;
         }
       }
- if (!(1 <= d_ && d_ <= year_data[m_] - year_data[m_-1]))
- {
- std::cout <<"===== ====== d= "<< int(d_) << std::endl;
- throw bad_date("day " + to_string(int(d_)) +
- " is out of range for " + to_string(y_) +
- '-' + to_string(int(m_)));
- }
+// if (!(1 <= d_ && d_ <= year_data[m_] - year_data[m_-1]))
+// {
+// std::cout <<"===== ====== d= "<< int(d_) << std::endl;
+// throw bad_date("day " + to_string(int(d_)) +
+// " is out of range for " + to_string(y_) +
+// '-' + to_string(int(m_)));
+// }
     }
 
 #endif
@@ -1117,10 +1117,10 @@
     {
       leap_ = y.is_leap();
       const day_of_year::rep* year_data = days_in_year_before(leap_);
- if (n_ != nth_week::not_applicable) // if a nth is involved
+// if (n_ != nth_week::not_applicable) // if a nth is involved
 
       {
- if (dow_ == weekday::not_applicable) // if we want nth day of month
+// if (dow_ == weekday::not_applicable) // if we want nth day of month
 
         {
           if (n_ == last.value_) // want last day of month
@@ -1133,56 +1133,56 @@
             d_ = n_; // want nth day of month
           }
         }
- else // we want nth weekday of month
-
- {
- // dow_ = [0 - 6]
- // n_ = [1 - 6] 6 means last
- int32_t by = y.value() + 32799;
- int32_t fy = by*365 + by/4 - by/100 + by/400;
- int n_days_in_month = year_data[m_] - year_data[m_-1];
- int d;
- if (n_ == last.value_)
- {
- int ldow = (fy + year_data[m_] + 1) % weekday::size;
- d = n_days_in_month;
- if (dow_ < ldow)
- {
- d -= ldow - dow_;
- }
- else if (dow_ > ldow)
- {
- d -= weekday::size - (dow_ - ldow);
- }
- }
- else
- {
- int fdow = (fy + year_data[m_-1] + 2) % weekday::size;
- d = 1 + (n_-1) * weekday::size;
- if (dow_ < fdow)
- {
- d += weekday::size - (fdow - dow_);
- }
- else if (dow_ > fdow)
- {
- d += dow_ - fdow;
- }
- if (d > n_days_in_month)
- {
- throw bad_date("day " + to_string(int(d)) +
- " is out of range for " + to_string(y_) +
- '-' + to_string(int(m_)));
- }
- }
- d_ = d;
- }
- }
- if (!(1 <= d_ && d_ <= year_data[m_] - year_data[m_-1]))
- {
- throw bad_date("day " + to_string(int(d_)) +
- " is out of range for " + to_string(y_) +
- '-' + to_string(int(m_)));
+// else // we want nth weekday of month
+//
+// {
+// // dow_ = [0 - 6]
+// // n_ = [1 - 6] 6 means last
+// int32_t by = y.value() + 32799;
+// int32_t fy = by*365 + by/4 - by/100 + by/400;
+// int n_days_in_month = year_data[m_] - year_data[m_-1];
+// int d;
+// if (n_ == last.value_)
+// {
+// int ldow = (fy + year_data[m_] + 1) % weekday::size;
+// d = n_days_in_month;
+// if (dow_ < ldow)
+// {
+// d -= ldow - dow_;
+// }
+// else if (dow_ > ldow)
+// {
+// d -= weekday::size - (dow_ - ldow);
+// }
+// }
+// else
+// {
+// int fdow = (fy + year_data[m_-1] + 2) % weekday::size;
+// d = 1 + (n_-1) * weekday::size;
+// if (dow_ < fdow)
+// {
+// d += weekday::size - (fdow - dow_);
+// }
+// else if (dow_ > fdow)
+// {
+// d += dow_ - fdow;
+// }
+// if (d > n_days_in_month)
+// {
+// throw bad_date("day " + to_string(int(d)) +
+// " is out of range for " + to_string(y_) +
+// '-' + to_string(int(m_)));
+// }
+// }
+// d_ = d;
+// }
       }
+// if (!(1 <= d_ && d_ <= year_data[m_] - year_data[m_-1]))
+// {
+// throw bad_date("day " + to_string(int(d_)) +
+// " is out of range for " + to_string(y_) +
+// '-' + to_string(int(m_)));
+// }
     }
 
 #endif


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