Chris@16: #ifndef GREG_MONTH_HPP___ Chris@16: #define GREG_MONTH_HPP___ Chris@16: Chris@16: /* Copyright (c) 2002,2003 CrystalClear Software, Inc. Chris@16: * Use, modification and distribution is subject to the Chris@16: * Boost Software License, Version 1.0. (See accompanying Chris@16: * file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt) Chris@16: * Author: Jeff Garland, Bart Garst Chris@101: * $Date$ Chris@16: */ Chris@16: Chris@16: #include "boost/date_time/constrained_value.hpp" Chris@16: #include "boost/date_time/date_defs.hpp" Chris@16: #include "boost/shared_ptr.hpp" Chris@16: #include "boost/date_time/compiler_config.hpp" Chris@16: #include Chris@16: #include Chris@16: #include Chris@16: #include Chris@16: #include Chris@16: Chris@16: namespace boost { Chris@16: namespace gregorian { Chris@16: Chris@16: typedef date_time::months_of_year months_of_year; Chris@16: Chris@16: //bring enum values into the namespace Chris@16: using date_time::Jan; Chris@16: using date_time::Feb; Chris@16: using date_time::Mar; Chris@16: using date_time::Apr; Chris@16: using date_time::May; Chris@16: using date_time::Jun; Chris@16: using date_time::Jul; Chris@16: using date_time::Aug; Chris@16: using date_time::Sep; Chris@16: using date_time::Oct; Chris@16: using date_time::Nov; Chris@16: using date_time::Dec; Chris@16: using date_time::NotAMonth; Chris@16: using date_time::NumMonths; Chris@16: Chris@16: //! Exception thrown if a greg_month is constructed with a value out of range Chris@16: struct bad_month : public std::out_of_range Chris@16: { Chris@16: bad_month() : std::out_of_range(std::string("Month number is out of range 1..12")) {} Chris@16: }; Chris@16: //! Build a policy class for the greg_month_rep Chris@16: typedef CV::simple_exception_policy greg_month_policies; Chris@16: //! A constrained range that implements the gregorian_month rules Chris@16: typedef CV::constrained_value greg_month_rep; Chris@16: Chris@16: Chris@16: //! Wrapper class to represent months in gregorian based calendar Chris@16: class BOOST_DATE_TIME_DECL greg_month : public greg_month_rep { Chris@16: public: Chris@16: typedef date_time::months_of_year month_enum; Chris@16: typedef std::map month_map_type; Chris@16: typedef boost::shared_ptr month_map_ptr_type; Chris@16: //! Construct a month from the months_of_year enumeration Chris@16: greg_month(month_enum theMonth) : Chris@16: greg_month_rep(static_cast(theMonth)) {} Chris@16: //! Construct from a short value Chris@16: greg_month(unsigned short theMonth) : greg_month_rep(theMonth) {} Chris@16: //! Convert the value back to a short Chris@16: operator unsigned short() const {return value_;} Chris@16: //! Returns month as number from 1 to 12 Chris@16: unsigned short as_number() const {return value_;} Chris@16: month_enum as_enum() const {return static_cast(value_);} Chris@16: const char* as_short_string() const; Chris@16: const char* as_long_string() const; Chris@16: #ifndef BOOST_NO_STD_WSTRING Chris@16: const wchar_t* as_short_wstring() const; Chris@16: const wchar_t* as_long_wstring() const; Chris@16: #endif // BOOST_NO_STD_WSTRING Chris@16: //! Shared pointer to a map of Month strings (Names & Abbrev) & numbers Chris@16: static month_map_ptr_type get_month_map_ptr(); Chris@16: Chris@16: /* parameterized as_*_string functions are intended to be called Chris@16: * from a template function: "... as_short_string(charT c='\0');" */ Chris@16: const char* as_short_string(char) const Chris@16: { Chris@16: return as_short_string(); Chris@16: } Chris@16: const char* as_long_string(char) const Chris@16: { Chris@16: return as_long_string(); Chris@16: } Chris@16: #ifndef BOOST_NO_STD_WSTRING Chris@16: const wchar_t* as_short_string(wchar_t) const Chris@16: { Chris@16: return as_short_wstring(); Chris@16: } Chris@16: const wchar_t* as_long_string(wchar_t) const Chris@16: { Chris@16: return as_long_wstring(); Chris@16: } Chris@16: #endif // BOOST_NO_STD_WSTRING Chris@16: }; Chris@16: Chris@16: } } //namespace gregorian Chris@16: Chris@16: Chris@16: Chris@16: #endif