greg_day.hpp 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. #ifndef GREG_DAY_HPP___
  2. #define GREG_DAY_HPP___
  3. /* Copyright (c) 2002,2003 CrystalClear Software, Inc.
  4. * Use, modification and distribution is subject to the
  5. * Boost Software License, Version 1.0. (See accompanying
  6. * file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt)
  7. * Author: Jeff Garland
  8. * $Date: 2008-02-27 15:00:24 -0500 (Wed, 27 Feb 2008) $
  9. */
  10. #include "boost/date_time/constrained_value.hpp"
  11. #include <stdexcept>
  12. #include <string>
  13. namespace boost {
  14. namespace gregorian {
  15. //! Exception type for gregorian day of month (1..31)
  16. struct bad_day_of_month : public std::out_of_range
  17. {
  18. bad_day_of_month() :
  19. std::out_of_range(std::string("Day of month value is out of range 1..31"))
  20. {}
  21. //! Allow other classes to throw with unique string for bad day like Feb 29
  22. bad_day_of_month(const std::string& s) :
  23. std::out_of_range(s)
  24. {}
  25. };
  26. //! Policy class that declares error handling and day of month ranges
  27. typedef CV::simple_exception_policy<unsigned short, 1, 31, bad_day_of_month> greg_day_policies;
  28. //! Generated represetation for gregorian day of month
  29. typedef CV::constrained_value<greg_day_policies> greg_day_rep;
  30. //! Represent a day of the month (range 1 - 31)
  31. /*! This small class allows for simple conversion an integer value into
  32. a day of the month for a standard gregorian calendar. The type
  33. is automatically range checked so values outside of the range 1-31
  34. will cause a bad_day_of_month exception
  35. */
  36. class greg_day : public greg_day_rep {
  37. public:
  38. greg_day(unsigned short day_of_month) : greg_day_rep(day_of_month) {}
  39. unsigned short as_number() const {return value_;}
  40. operator unsigned short() const {return value_;}
  41. private:
  42. };
  43. } } //namespace gregorian
  44. #endif