diff options
Diffstat (limited to '3rdParty/Boost/boost/date_time/gregorian_calendar.ipp')
m--------- | 3rdParty/Boost | 0 | ||||
-rw-r--r-- | 3rdParty/Boost/boost/date_time/gregorian_calendar.ipp | 219 |
2 files changed, 0 insertions, 219 deletions
diff --git a/3rdParty/Boost b/3rdParty/Boost new file mode 160000 +Subproject 3bbdbc8cf1996f23d9a366da8bac0f97be6ad79 diff --git a/3rdParty/Boost/boost/date_time/gregorian_calendar.ipp b/3rdParty/Boost/boost/date_time/gregorian_calendar.ipp deleted file mode 100644 index b7628fc..0000000 --- a/3rdParty/Boost/boost/date_time/gregorian_calendar.ipp +++ /dev/null @@ -1,219 +0,0 @@ -/* Copyright (c) 2002,2003 CrystalClear Software, Inc. - * Use, modification and distribution is subject to the - * Boost Software License, Version 1.0. (See accompanying - * file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt) - * Author: Jeff Garland, Bart Garst - * $Date: 2008-11-12 14:37:53 -0500 (Wed, 12 Nov 2008) $ - */ - -#ifndef NO_BOOST_DATE_TIME_INLINE - #undef BOOST_DATE_TIME_INLINE - #define BOOST_DATE_TIME_INLINE inline -#endif - -namespace boost { -namespace date_time { - //! Return the day of the week (0==Sunday, 1==Monday, etc) - /*! Converts a year-month-day into a day of the week number - */ - template<typename ymd_type_, typename date_int_type_> - BOOST_DATE_TIME_INLINE - unsigned short - gregorian_calendar_base<ymd_type_,date_int_type_>::day_of_week(const ymd_type& ymd) { - unsigned short a = static_cast<unsigned short>((14-ymd.month)/12); - unsigned short y = static_cast<unsigned short>(ymd.year - a); - unsigned short m = static_cast<unsigned short>(ymd.month + 12*a - 2); - unsigned short d = static_cast<unsigned short>((ymd.day + y + (y/4) - (y/100) + (y/400) + (31*m)/12) % 7); - //std::cout << year << "-" << month << "-" << day << " is day: " << d << "\n"; - return d; - } - - //!Return the iso week number for the date - /*!Implements the rules associated with the iso 8601 week number. - Basically the rule is that Week 1 of the year is the week that contains - January 4th or the week that contains the first Thursday in January. - Reference for this algorithm is the Calendar FAQ by Claus Tondering, April 2000. - */ - template<typename ymd_type_, typename date_int_type_> - BOOST_DATE_TIME_INLINE - int - gregorian_calendar_base<ymd_type_,date_int_type_>::week_number(const ymd_type& ymd) { - unsigned long julianbegin = julian_day_number(ymd_type(ymd.year,1,1)); - unsigned long juliantoday = julian_day_number(ymd); - unsigned long day = (julianbegin + 3) % 7; - unsigned long week = (juliantoday + day - julianbegin + 4)/7; - - if ((week >= 1) && (week <= 52)) { - return week; - } - - if ((week == 53)) { - if((day==6) ||(day == 5 && is_leap_year(ymd.year))) { - return week; //under these circumstances week == 53. - } else { - return 1; //monday - wednesday is in week 1 of next year - } - } - //if the week is not in current year recalculate using the previous year as the beginning year - else if (week == 0) { - julianbegin = julian_day_number(ymd_type(static_cast<unsigned short>(ymd.year-1),1,1)); - juliantoday = julian_day_number(ymd); - day = (julianbegin + 3) % 7; - week = (juliantoday + day - julianbegin + 4)/7; - return week; - } - - return week; //not reachable -- well except if day == 5 and is_leap_year != true - - } - - //! Convert a ymd_type into a day number - /*! The day number is an absolute number of days since the start of count - */ - template<typename ymd_type_, typename date_int_type_> - BOOST_DATE_TIME_INLINE - date_int_type_ - gregorian_calendar_base<ymd_type_,date_int_type_>::day_number(const ymd_type& ymd) - { - unsigned short a = static_cast<unsigned short>((14-ymd.month)/12); - unsigned short y = static_cast<unsigned short>(ymd.year + 4800 - a); - unsigned short m = static_cast<unsigned short>(ymd.month + 12*a - 3); - unsigned long d = ymd.day + ((153*m + 2)/5) + 365*y + (y/4) - (y/100) + (y/400) - 32045; - return d; - } - - //! Convert a year-month-day into the julian day number - /*! Since this implementation uses julian day internally, this is the same as the day_number. - */ - template<typename ymd_type_, typename date_int_type_> - BOOST_DATE_TIME_INLINE - date_int_type_ - gregorian_calendar_base<ymd_type_,date_int_type_>::julian_day_number(const ymd_type& ymd) - { - return day_number(ymd); - } - - //! Convert year-month-day into a modified julian day number - /*! The day number is an absolute number of days. - * MJD 0 thus started on 17 Nov 1858(Gregorian) at 00:00:00 UTC - */ - template<typename ymd_type_, typename date_int_type_> - BOOST_DATE_TIME_INLINE - long - gregorian_calendar_base<ymd_type_,date_int_type_>::modjulian_day_number(const ymd_type& ymd) - { - return julian_day_number(ymd)-2400001; //prerounded - } - - //! Change a day number into a year-month-day - template<typename ymd_type_, typename date_int_type_> - BOOST_DATE_TIME_INLINE - ymd_type_ - gregorian_calendar_base<ymd_type_,date_int_type_>::from_day_number(date_int_type dayNumber) - { - date_int_type a = dayNumber + 32044; - date_int_type b = (4*a + 3)/146097; - date_int_type c = a-((146097*b)/4); - date_int_type d = (4*c + 3)/1461; - date_int_type e = c - (1461*d)/4; - date_int_type m = (5*e + 2)/153; - unsigned short day = static_cast<unsigned short>(e - ((153*m + 2)/5) + 1); - unsigned short month = static_cast<unsigned short>(m + 3 - 12 * (m/10)); - year_type year = static_cast<unsigned short>(100*b + d - 4800 + (m/10)); - //std::cout << year << "-" << month << "-" << day << "\n"; - - return ymd_type(static_cast<unsigned short>(year),month,day); - } - - //! Change a day number into a year-month-day - template<typename ymd_type_, typename date_int_type_> - BOOST_DATE_TIME_INLINE - ymd_type_ - gregorian_calendar_base<ymd_type_,date_int_type_>::from_julian_day_number(date_int_type dayNumber) - { - date_int_type a = dayNumber + 32044; - date_int_type b = (4*a+3)/146097; - date_int_type c = a - ((146097*b)/4); - date_int_type d = (4*c + 3)/1461; - date_int_type e = c - ((1461*d)/4); - date_int_type m = (5*e + 2)/153; - unsigned short day = static_cast<unsigned short>(e - ((153*m + 2)/5) + 1); - unsigned short month = static_cast<unsigned short>(m + 3 - 12 * (m/10)); - year_type year = static_cast<year_type>(100*b + d - 4800 + (m/10)); - //std::cout << year << "-" << month << "-" << day << "\n"; - - return ymd_type(year,month,day); - } - - //! Change a modified julian day number into a year-month-day - template<typename ymd_type_, typename date_int_type_> - BOOST_DATE_TIME_INLINE - ymd_type_ - gregorian_calendar_base<ymd_type_,date_int_type_>::from_modjulian_day_number(long dayNumber) { - date_int_type jd = dayNumber + 2400001; //is 2400000.5 prerounded - return from_julian_day_number(jd); - } - - //! Determine if the provided year is a leap year - /*! - *@return true if year is a leap year, false otherwise - */ - template<typename ymd_type_, typename date_int_type_> - BOOST_DATE_TIME_INLINE - bool - gregorian_calendar_base<ymd_type_,date_int_type_>::is_leap_year(year_type year) - { - //divisible by 4, not if divisible by 100, but true if divisible by 400 - return (!(year % 4)) && ((year % 100) || (!(year % 400))); - } - - //! Calculate the last day of the month - /*! Find the day which is the end of the month given year and month - * No error checking is performed. - */ - template<typename ymd_type_, typename date_int_type_> - BOOST_DATE_TIME_INLINE - unsigned short - gregorian_calendar_base<ymd_type_,date_int_type_>::end_of_month_day(year_type year, - month_type month) - { - switch (month) { - case 2: - if (is_leap_year(year)) { - return 29; - } else { - return 28; - }; - case 4: - case 6: - case 9: - case 11: - return 30; - default: - return 31; - }; - - } - - //! Provide the ymd_type specification for the calandar start - template<typename ymd_type_, typename date_int_type_> - BOOST_DATE_TIME_INLINE - ymd_type_ - gregorian_calendar_base<ymd_type_,date_int_type_>::epoch() - { - return ymd_type(1400,1,1); - } - - //! Defines length of a week for week calculations - template<typename ymd_type_, typename date_int_type_> - BOOST_DATE_TIME_INLINE - unsigned short - gregorian_calendar_base<ymd_type_,date_int_type_>::days_in_week() - { - return 7; - } - - -} } //namespace gregorian - - |