ossrv_pub/boost_apis/boost/date_time/date_formatting_limited.hpp
changeset 0 e4d67989cc36
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ossrv_pub/boost_apis/boost/date_time/date_formatting_limited.hpp	Tue Feb 02 02:01:42 2010 +0200
@@ -0,0 +1,121 @@
+#ifndef DATE_TIME_DATE_FORMATTING_LIMITED_HPP___
+#define DATE_TIME_DATE_FORMATTING_LIMITED_HPP___
+
+/* Copyright (c) 2002-2004 CrystalClear Software, Inc.
+ * Use, modification and distribution is subject to the 
+ * Boost Software License, Version 1.0. (See accompanying
+ * file LICENSE-1.0 or http://www.boost.org/LICENSE-1.0)
+ * Author: Jeff Garland, Bart Garst
+ * $Date: 2004/08/29 19:31:12 $
+ */
+
+#include "boost/date_time/iso_format.hpp"
+#include "boost/date_time/compiler_config.hpp"
+#include <string>
+#include <sstream>
+#include <iomanip>
+
+
+namespace boost {
+namespace date_time {
+
+  //! Formats a month as as string into an ostream
+  template<class month_type, class format_type>
+  class month_formatter
+  {
+  public:
+    //! Formats a month as as string into an ostream
+    /*! This function demands that month_type provide
+     *  functions for converting to short and long strings
+     *  if that capability is used.
+     */
+    static std::ostream& format_month(const month_type& month,
+                                      std::ostream& os)
+    {
+      switch (format_type::month_format()) 
+      {
+        case month_as_short_string: 
+        { 
+          os << month.as_short_string(); 
+          break;
+        }
+        case month_as_long_string: 
+        { 
+          os << month.as_long_string(); 
+          break;
+        }
+        case month_as_integer: 
+        { 
+          os << std::setw(2) << std::setfill('0') << month.as_number();
+          break;
+        }
+     
+      }
+      return os;
+    } // format_month
+  };
+
+
+  //! Convert ymd to a standard string formatting policies
+  template<class ymd_type, class format_type>
+  class ymd_formatter
+  {
+  public:
+    //! Convert ymd to a standard string formatting policies
+    /*! This is standard code for handling date formatting with
+     *  year-month-day based date information.  This function 
+     *  uses the format_type to control whether the string will
+     *  contain separator characters, and if so what the character
+     *  will be.  In addtion, it can format the month as either
+     *  an integer or a string as controled by the formatting 
+     *  policy
+     */ 
+    static std::string ymd_to_string(ymd_type ymd)
+    {
+      typedef typename ymd_type::month_type month_type;
+      std::ostringstream ss;
+      ss << ymd.year;
+      if (format_type::has_date_sep_chars()) {
+        ss << format_type::month_sep_char();
+      }
+      //this name is a bit ugly, oh well....
+      month_formatter<month_type,format_type>::format_month(ymd.month, ss);
+      if (format_type::has_date_sep_chars()) {
+        ss << format_type::day_sep_char();
+      }
+      ss  << std::setw(2) << std::setfill('0') 
+          << ymd.day;
+      return ss.str();
+    }
+  };
+
+
+  //! Convert a date to string using format policies
+  template<class date_type, class format_type>
+  class date_formatter
+  {
+  public:
+    //! Convert to a date to standard string using format policies
+    static std::string date_to_string(date_type d)
+    {
+      typedef typename date_type::ymd_type ymd_type;
+      if (d.is_not_a_date()) {
+        return format_type::not_a_date();
+      }
+      if (d.is_neg_infinity()) {
+        return format_type::neg_infinity();
+      }
+      if (d.is_pos_infinity()) {
+        return format_type::pos_infinity();
+      }
+      ymd_type ymd = d.year_month_day();
+      return ymd_formatter<ymd_type, format_type>::ymd_to_string(ymd);
+    }    
+  };
+
+
+} } //namespace date_time
+
+
+#endif
+