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