LCOV - code coverage report
Current view: top level - opt/homebrew/include/boost/date_time/gregorian - greg_month.hpp (source / functions) Hit Total Coverage
Test: test_dash_coverage.info Lines: 2 3 66.7 %
Date: 2026-06-25 07:23:51 Functions: 3 9 33.3 %

          Line data    Source code
       1             : #ifndef GREG_MONTH_HPP___
       2             : #define GREG_MONTH_HPP___
       3             : 
       4             : /* Copyright (c) 2002,2003, 2020 CrystalClear Software, Inc.
       5             :  * Use, modification and distribution is subject to the 
       6             :  * Boost Software License, Version 1.0. (See accompanying
       7             :  * file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt)
       8             :  * Author: Jeff Garland, Bart Garst
       9             :  * $Date$
      10             :  */
      11             : 
      12             : #include <boost/date_time/constrained_value.hpp>
      13             : #include <boost/date_time/date_defs.hpp>
      14             : #include <boost/date_time/compiler_config.hpp>
      15             : #include <stdexcept>
      16             : #include <string>
      17             : 
      18             : namespace boost {
      19             : namespace gregorian {
      20             : 
      21             :   typedef date_time::months_of_year months_of_year;
      22             : 
      23             :   //bring enum values into the namespace
      24             :   using date_time::Jan;
      25             :   using date_time::Feb;
      26             :   using date_time::Mar;
      27             :   using date_time::Apr;
      28             :   using date_time::May;
      29             :   using date_time::Jun;
      30             :   using date_time::Jul;
      31             :   using date_time::Aug;
      32             :   using date_time::Sep;
      33             :   using date_time::Oct;
      34             :   using date_time::Nov;
      35             :   using date_time::Dec;
      36             :   using date_time::NotAMonth;
      37             :   using date_time::NumMonths;
      38             : 
      39             :   //! Exception thrown if a greg_month is constructed with a value out of range
      40             :   struct BOOST_SYMBOL_VISIBLE bad_month : public std::out_of_range
      41             :   {
      42           0 :     bad_month() : std::out_of_range(std::string("Month number is out of range 1..12")) {}
      43             :   };
      44             :   //! Build a policy class for the greg_month_rep
      45             :   typedef CV::simple_exception_policy<unsigned short, 1, 12, bad_month> greg_month_policies;
      46             :   //! A constrained range that implements the gregorian_month rules
      47             :   typedef CV::constrained_value<greg_month_policies> greg_month_rep;
      48             : 
      49             : 
      50             :   //! Wrapper class to represent months in gregorian based calendar
      51             :   class BOOST_SYMBOL_VISIBLE greg_month : public greg_month_rep {
      52             :   public:
      53             :     typedef date_time::months_of_year month_enum;
      54             : 
      55             :     //! Construct a month from the months_of_year enumeration
      56             :     BOOST_CXX14_CONSTEXPR greg_month(month_enum theMonth) :
      57             :       greg_month_rep(static_cast<greg_month_rep::value_type>(theMonth)) {}
      58             :     //! Construct from a short value
      59          28 :     BOOST_CXX14_CONSTEXPR greg_month(value_type theMonth) : greg_month_rep(theMonth) {}
      60             :     //! Convert the value back to a short
      61          24 :     BOOST_CXX14_CONSTEXPR operator value_type()  const {return value_;}
      62             :     //! Returns month as number from 1 to 12
      63             :     BOOST_CXX14_CONSTEXPR value_type as_number() const {return value_;}
      64             :     BOOST_CXX14_CONSTEXPR month_enum as_enum() const {return static_cast<month_enum>(value_);}
      65             : 
      66             :     //! Returns 3 char english string for the month ex: Jan, Feb, Mar, Apr
      67             :     const char*
      68             :     as_short_string() const
      69             :     {
      70             :       static const char* const short_month_names[NumMonths]
      71             :         = {"Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec", "NAM"};
      72             :       return short_month_names[value_-1];
      73             :     }
      74             : 
      75             :     //! Returns full name of month as string in english ex: January, February
      76             :     const char*
      77             :     as_long_string() const
      78             :     {
      79             :       static const char* const long_month_names[NumMonths]
      80             :         = {"January","February","March","April","May","June","July","August",
      81             :            "September","October","November","December","NotAMonth"};
      82             :       return long_month_names[value_-1];
      83             :     }
      84             : 
      85             : #ifndef BOOST_NO_STD_WSTRING
      86             : 
      87             :     //! Returns 3 wchar_t english string for the month ex: Jan, Feb, Mar, Apr
      88             :     const wchar_t*
      89             :     as_short_wstring() const
      90             :     {
      91             :       static const wchar_t* const w_short_month_names[NumMonths]
      92             :         = {L"Jan",L"Feb",L"Mar",L"Apr",L"May",L"Jun",L"Jul",L"Aug",L"Sep",L"Oct",
      93             :            L"Nov",L"Dec",L"NAM"};
      94             :       return w_short_month_names[value_-1];
      95             :     }
      96             : 
      97             :     //! Returns full name of month as wchar_t string in english ex: January, February
      98             :     const wchar_t*
      99             :     as_long_wstring() const
     100             :     {
     101             :       static const wchar_t* const w_long_month_names[NumMonths]
     102             :         = {L"January",L"February",L"March",L"April",L"May",L"June",L"July",L"August",
     103             :            L"September",L"October",L"November",L"December",L"NotAMonth"};
     104             :       return w_long_month_names[value_-1];
     105             :     }
     106             : 
     107             : #endif // BOOST_NO_STD_WSTRING
     108             : 
     109             :     /* parameterized as_*_string functions are intended to be called
     110             :      * from a template function: "... as_short_string(charT c='\0');" */
     111             :     const char* as_short_string(char) const
     112             :     {
     113             :       return as_short_string();
     114             :     }
     115             :     const char* as_long_string(char) const
     116             :     {
     117             :       return as_long_string();
     118             :     }
     119             : #ifndef BOOST_NO_STD_WSTRING
     120             :     const wchar_t* as_short_string(wchar_t) const
     121             :     {
     122             :       return as_short_wstring();
     123             :     }
     124             :     const wchar_t* as_long_string(wchar_t) const
     125             :     {
     126             :       return as_long_wstring();
     127             :     }
     128             : #endif // BOOST_NO_STD_WSTRING
     129             :   };
     130             : 
     131             : } } //namespace gregorian
     132             : 
     133             : #endif

Generated by: LCOV version 1.16