From 4b8ca1c24d4e5757b9bc422574ac3b76ed913fd4 Mon Sep 17 00:00:00 2001 From: Howard Hinnant Date: Sun, 9 Aug 2015 18:37:46 -0400 Subject: [PATCH] Change year_month_day_last to store a {year, month_day_last} * from storing a {year, month}. * Change constructor from {year, month} to {year, month_day_last}. * Add getter from year_month_day_last(). * Fix up operator/() as required. * This is an API change, but not a functionality change. * Rationale: consistency. --- date.h | 48 +++++++++++++++++++++++++++++------------------- 1 file changed, 29 insertions(+), 19 deletions(-) diff --git a/date.h b/date.h index d0bd8d0..50e54a5 100644 --- a/date.h +++ b/date.h @@ -575,20 +575,22 @@ std::ostream& operator<<(std::ostream& os, const year_month_day& ymd); class year_month_day_last { - date::year y_; - date::month m_; + date::year y_; + date::month_day_last mdl_; public: - CONSTCD11 year_month_day_last(const date::year& y, const date::month& m) noexcept; + CONSTCD11 year_month_day_last(const date::year& y, + const date::month_day_last& mdl) noexcept; year_month_day_last& operator+=(const months& m) noexcept; year_month_day_last& operator-=(const months& m) noexcept; year_month_day_last& operator+=(const years& y) noexcept; year_month_day_last& operator-=(const years& y) noexcept; - CONSTCD11 date::year year() const noexcept; - CONSTCD11 date::month month() const noexcept; - CONSTCD14 date::day day() const noexcept; + CONSTCD11 date::year year() const noexcept; + CONSTCD11 date::month month() const noexcept; + CONSTCD11 date::month_day_last month_day_last() const noexcept; + CONSTCD14 date::day day() const noexcept; CONSTCD14 operator day_point() const noexcept; CONSTCD11 bool ok() const noexcept; @@ -703,7 +705,7 @@ class year_month_weekday_last public: CONSTCD11 year_month_weekday_last(const date::year& y, const date::month& m, - const date::weekday_last& wdl) noexcept; + const date::weekday_last& wdl) noexcept; year_month_weekday_last& operator+=(const months& m) noexcept; year_month_weekday_last& operator-=(const months& m) noexcept; @@ -1964,9 +1966,9 @@ operator<<(std::ostream& os, const month_weekday_last& mwdl) CONSTCD11 inline year_month_day_last::year_month_day_last(const date::year& y, - const date::month& m) noexcept + const date::month_day_last& mdl) noexcept : y_(y) - , m_(m) + , mdl_(mdl) {} inline @@ -2002,7 +2004,15 @@ year_month_day_last::operator-=(const years& y) noexcept } CONSTCD11 inline year year_month_day_last::year() const noexcept {return y_;} -CONSTCD11 inline month year_month_day_last::month() const noexcept {return m_;} +CONSTCD11 inline month year_month_day_last::month() const noexcept {return mdl_.month();} + +CONSTCD11 +inline +month_day_last +year_month_day_last::month_day_last() const noexcept +{ + return mdl_; +} CONSTCD14 inline @@ -2011,7 +2021,7 @@ year_month_day_last::day() const noexcept { CONSTDATA date::day d[] = {31_d, 28_d, 31_d, 30_d, 31_d, 30_d, 31_d, 31_d, 30_d, 31_d, 30_d, 31_d}; - return m_ != feb || !y_.is_leap() ? d[static_cast(m_)-1] : 29_d; + return month() != feb || !y_.is_leap() ? d[static_cast(month())-1] : 29_d; } CONSTCD11 @@ -2019,7 +2029,7 @@ inline bool year_month_day_last::ok() const noexcept { - return y_.ok() && m_.ok(); + return y_.ok() && mdl_.ok(); } CONSTCD11 @@ -2027,7 +2037,7 @@ inline bool operator==(const year_month_day_last& x, const year_month_day_last& y) noexcept { - return x.year() == y.year() && x.month() == y.month(); + return x.year() == y.year() && x.month_day_last() == y.month_day_last(); } CONSTCD11 @@ -2045,7 +2055,7 @@ operator<(const year_month_day_last& x, const year_month_day_last& y) noexcept { return x.year() < y.year() ? true : (x.year() > y.year() ? false - : (x.month() < y.month())); + : (x.month_day_last() < y.month_day_last())); } CONSTCD11 @@ -2076,7 +2086,7 @@ inline std::ostream& operator<<(std::ostream& os, const year_month_day_last& ymdl) { - return os << ymdl.year() << '/' << ymdl.month() << "/last"; + return os << ymdl.year() << '/' << ymdl.month_day_last(); } CONSTCD14 @@ -2108,7 +2118,7 @@ inline year_month_day_last operator+(const year_month_day_last& ymdl, const years& dy) noexcept { - return {ymdl.year()+dy, ymdl.month()}; + return {ymdl.year()+dy, ymdl.month_day_last()}; } CONSTCD11 @@ -2210,7 +2220,7 @@ CONSTCD14 inline year_month_day_last::operator day_point() const noexcept { - return day_point(y_/m_/day()); + return day_point(year()/month()/day()); } CONSTCD14 @@ -2879,7 +2889,7 @@ inline year_month_day_last operator/(const year_month& ym, last_spec) noexcept { - return {ym.year(), ym.month()}; + return {ym.year(), month_day_last{ym.month()}}; } CONSTCD11 @@ -2887,7 +2897,7 @@ inline year_month_day_last operator/(const year& y, const month_day_last& mdl) noexcept { - return {y, mdl.month()}; + return {y, mdl}; } CONSTCD11