$include_dir="/home/hyper-archives/boost-commit/include"; include("$include_dir/msg-header.inc") ?>
Subject: [Boost-commit] svn:boost r53625 - trunk/boost/date_time/gregorian
From: andrey.semashev_at_[hidden]
Date: 2009-06-04 07:22:12
Author: andysem
Date: 2009-06-04 07:22:11 EDT (Thu, 04 Jun 2009)
New Revision: 53625
URL: http://svn.boost.org/trac/boost/changeset/53625
Log:
Fixes #3015.
Text files modified: 
   trunk/boost/date_time/gregorian/conversion.hpp |    52 ++++++++++++++++----------------------- 
   1 files changed, 21 insertions(+), 31 deletions(-)
Modified: trunk/boost/date_time/gregorian/conversion.hpp
==============================================================================
--- trunk/boost/date_time/gregorian/conversion.hpp	(original)
+++ trunk/boost/date_time/gregorian/conversion.hpp	2009-06-04 07:22:11 EDT (Thu, 04 Jun 2009)
@@ -2,7 +2,7 @@
 #define _GREGORIAN__CONVERSION_HPP___
 
 /* Copyright (c) 2004-2005 CrystalClear Software, Inc.
- * Use, modification and distribution is subject to the 
+ * Use, modification and distribution is subject to the
  * Boost Software License, Version 1.0. (See accompanying
  * file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt)
  * Author: Jeff Garland, Bart Garst
@@ -14,52 +14,46 @@
 #include <boost/throw_exception.hpp>
 #include <boost/date_time/gregorian/gregorian_types.hpp>
 #include <boost/date_time/c_time.hpp>
-#if defined(USE_DATE_TIME_PRE_1_33_FACET_IO)
-#  if defined(BOOST_DATE_TIME_INCLUDE_LIMITED_HEADERS)
-#    include <boost/date_time/gregorian/formatters_limited.hpp>
-#  else
-#    include <boost/date_time/gregorian/formatters.hpp>
-#  endif // BOOST_DATE_TIME_INCLUDE_LIMITED_HEADERS
-#else
-#  include <sstream>
-#  include <boost/date_time/gregorian/gregorian_io.hpp>
-#endif // USE_DATE_TIME_PRE_1_33_FACET_IO
 
 namespace boost {
 
 namespace gregorian {
 
-
   //! Converts a date to a tm struct. Throws out_of_range exception if date is a special value
   inline
   std::tm to_tm(const date& d)
   {
-    if(d.is_pos_infinity() || d.is_neg_infinity() || d.is_not_a_date()){
-      std::string s = "tm unable to handle date value of ";
-#if defined(USE_DATE_TIME_PRE_1_33_FACET_IO)
-      s += to_simple_string(d);
-#else
-      std::ostringstream ss;
-      ss << d;
-      s += ss.str();
-#endif // USE_DATE_TIME_PRE_1_33_FACET_IO
-      boost::throw_exception(std::out_of_range(s));
+    if (d.is_special())
+    {
+        std::string s = "tm unable to handle ";
+        switch (d.as_special())
+        {
+        case not_a_date_time:
+            s += "not-a-date-time value"; break;
+        case neg_infin:
+            s += "-infinity date value"; break;
+        case pos_infin:
+            s += "+infinity date value"; break;
+        default:
+            s += "a special date value"; break;
+        }
+        boost::throw_exception(std::out_of_range(s));
     }
+
     std::tm datetm = {}; // zero initialization is needed for extension members, like tm_zone
     boost::gregorian::date::ymd_type ymd = d.year_month_day();
-    datetm.tm_year = ymd.year-1900;
-    datetm.tm_mon = ymd.month-1;
+    datetm.tm_year = ymd.year - 1900;
+    datetm.tm_mon = ymd.month - 1;
     datetm.tm_mday = ymd.day;
     datetm.tm_wday = d.day_of_week();
-    datetm.tm_yday = d.day_of_year()-1;
-    datetm.tm_hour = datetm.tm_min = datetm.tm_sec = 0;
+    datetm.tm_yday = d.day_of_year() - 1;
     datetm.tm_isdst = -1; // negative because not enough info to set tm_isdst
     return datetm;
   }
 
   //! Converts a tm structure into a date dropping the any time values.
   inline
-  date date_from_tm(const std::tm& datetm) 
+  date date_from_tm(const std::tm& datetm)
   {
     return date(static_cast<unsigned short>(datetm.tm_year+1900),
                 static_cast<unsigned short>(datetm.tm_mon+1),
@@ -69,8 +63,4 @@
 
 } } //namespace boost::gregorian
 
-
-
-
 #endif
-