1 #ifndef GREG_YEAR_HPP___
2 #define GREG_YEAR_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
9  * $Date$
10  */
11 
12 #include <boost/date_time/compiler_config.hpp>
13 #include <boost/date_time/constrained_value.hpp>
14 #include <stdexcept>
15 #include <string>
16 
17 namespace boost {
18 namespace gregorian {
19 
20   //! Exception type for gregorian year
21   struct BOOST_SYMBOL_VISIBLE bad_year : public std::out_of_range
22   {
bad_yearboost::gregorian::bad_year23     bad_year() :
24       std::out_of_range(std::string("Year is out of valid range: 1400..9999"))
25     {}
26   };
27   //! Policy class that declares error handling gregorian year type
28   typedef CV::simple_exception_policy<unsigned short, 1400, 9999, bad_year> greg_year_policies;
29 
30   //! Generated representation for gregorian year
31   typedef CV::constrained_value<greg_year_policies> greg_year_rep;
32 
33   //! Represent a year (range 1400 - 9999)
34   /*! This small class allows for simple conversion an integer value into
35       a year for the gregorian calendar.  This currently only allows a
36       range of 1400 to 9999.  Both ends of the range are a bit arbitrary
37       at the moment, but they are the limits of current testing of the
38       library.  As such they may be increased in the future.
39   */
40   class BOOST_SYMBOL_VISIBLE greg_year : public greg_year_rep {
41   public:
greg_year(value_type year)42     BOOST_CXX14_CONSTEXPR greg_year(value_type year) : greg_year_rep(year) {}
operator value_type() const43     BOOST_CXX14_CONSTEXPR operator value_type()  const {return value_;}
44   };
45 
46 
47 
48 } } //namespace gregorian
49 
50 
51 
52 #endif
53