100 explicit weekday(
int) =
delete;
130 template<
class CharT,
class Traits>
131 std::basic_ostream<CharT, Traits>&
132 operator<<(std::basic_ostream<CharT, Traits>& os,
const weekday& wd);
170 template<
class CharT,
class Traits>
171 std::basic_ostream<CharT, Traits>&
172 operator<<(std::basic_ostream<CharT, Traits>& os,
const year& y);
207 template<
class CharT,
class Traits>
208 std::basic_ostream<CharT, Traits>&
209 operator<<(std::basic_ostream<CharT, Traits>& os,
const weeknum& wn);
241 template<
class CharT,
class Traits>
242 std::basic_ostream<CharT, Traits>&
243 operator<<(std::basic_ostream<CharT, Traits>& os,
const year_weeknum& ym);
274 template<
class CharT,
class Traits>
275 std::basic_ostream<CharT, Traits>&
276 operator<<(std::basic_ostream<CharT, Traits>& os,
const year_lastweek& ym);
302 template<
class CharT,
class Traits>
303 std::basic_ostream<CharT, Traits>&
304 operator<<(std::basic_ostream<CharT, Traits>& os,
const weeknum_weekday& md);
327 template<
class CharT,
class Traits>
328 std::basic_ostream<CharT, Traits>&
329 operator<<(std::basic_ostream<CharT, Traits>& os,
const lastweek_weekday& md);
365 template<
class CharT,
class Traits>
366 std::basic_ostream<CharT, Traits>&
410 template<
class CharT,
class Traits>
411 std::basic_ostream<CharT, Traits>&
423 weekday::to_iso_encoding(
unsigned char z) NOEXCEPT
425 return z != 0 ? z : (
unsigned char)7;
431 weekday::from_iso_encoding(
unsigned z) NOEXCEPT
433 return z != 7 ? z : 0u;
439 weekday::weekday_from_days(
int z) NOEXCEPT
441 return to_iso_encoding(static_cast<unsigned char>(static_cast<unsigned>(
442 z >= -4 ? (z+4) % 7 : (z+5) % 7 + 6)));
448 : wd_(
static_cast<decltype(wd_)
>(wd))
454 : wd_(to_iso_encoding(static_cast<unsigned>(wd)))
460 : wd_(weekday_from_days(dp.time_since_epoch().count()))
466 : wd_(weekday_from_days(dp.time_since_epoch().count()))
492 weekday::operator unsigned() const NOEXCEPT
511 return static_cast<unsigned>(x) == static_cast<unsigned>(y);
527 auto const diff =
static_cast<unsigned>(x) - static_cast<unsigned>(y);
528 return days{diff <= 6 ? diff : diff + 7};
536 auto const wdu =
static_cast<long long>(
static_cast<unsigned>(x) - 1u) + y.count();
537 auto const wk = (wdu >= 0 ? wdu : wdu-6) / 7;
538 return weekday{
static_cast<unsigned>(wdu - wk * 7) + 1u};
557 template<
class CharT,
class Traits>
559 std::basic_ostream<CharT, Traits>&
560 operator<<(std::basic_ostream<CharT, Traits>& os,
const weekday& wd)
562 switch (static_cast<unsigned>(wd))
586 os << static_cast<unsigned>(wd) <<
" is not a valid weekday";
602 CONSTCD11 inline year::operator int() const NOEXCEPT {
return y_;}
611 static_assert(
sizeof(seconds)*CHAR_BIT >= 41,
"seconds may overflow");
612 static_assert(
sizeof(hours)*CHAR_BIT >= 30,
"hours may overflow");
613 return sizeof(minutes)*CHAR_BIT < 34 ?
614 year{1970} + duration_cast<
years>(minutes::min()) :
615 year{std::numeric_limits<short>::min()};
624 static_assert(
sizeof(seconds)*CHAR_BIT >= 41,
"seconds may overflow");
625 static_assert(
sizeof(hours)*CHAR_BIT >= 30,
"hours may overflow");
626 return sizeof(minutes)*CHAR_BIT < 34 ?
627 year{1969} + duration_cast<
years>(minutes::max()) :
628 year{std::numeric_limits<short>::max()};
636 return static_cast<int>(x) == static_cast<int>(y);
652 return static_cast<int>(x) < static_cast<int>(y);
684 return years{
static_cast<int>(x) - static_cast<int>(y)};
692 return year{
static_cast<int>(x) + y.count()};
708 return year{
static_cast<int>(x) - y.count()};
711 template<
class CharT,
class Traits>
713 std::basic_ostream<CharT, Traits>&
714 operator<<(std::basic_ostream<CharT, Traits>& os,
const year& y)
719 os.width(4 + (y <
year{0}));
720 os << static_cast<int>(y);
724 #if !defined(_MSC_VER) || (_MSC_VER >= 1900) 725 inline namespace literals
731 operator "" _y(
unsigned long long y) NOEXCEPT
739 operator "" _w(
unsigned long long wn) NOEXCEPT
744 #endif // !defined(_MSC_VER) || (_MSC_VER >= 1900) 756 #if !defined(_MSC_VER) || (_MSC_VER >= 1900) 765 : wn_(
static_cast<decltype(wn_)
>(wn))
789 CONSTCD11 inline weeknum::operator unsigned() const NOEXCEPT {
return wn_;}
797 return static_cast<unsigned>(x) == static_cast<unsigned>(y);
813 return static_cast<unsigned>(x) < static_cast<unsigned>(y);
845 return weeks{
static_cast<weeks::rep
>(
static_cast<unsigned>(x)) -
846 static_cast<weeks::rep
>(
static_cast<unsigned>(y))};
854 return weeknum{
static_cast<unsigned>(x) + static_cast<unsigned>(y.count())};
873 template<
class CharT,
class Traits>
875 std::basic_ostream<CharT, Traits>&
876 operator<<(std::basic_ostream<CharT, Traits>& os,
const weeknum& wn)
883 os << static_cast<unsigned>(wn);
900 return y_.ok() && 1u <= static_cast<unsigned>(wn_) && wn_ <= (y_/
last).weeknum();
993 template<
class CharT,
class Traits>
995 std::basic_ostream<CharT, Traits>&
996 operator<<(std::basic_ostream<CharT, Traits>& os,
const year_weeknum& ywn)
1017 const auto y =
date::year{
static_cast<int>(y_)};
1020 return iso_week::weeknum(static_cast<unsigned>(date::trunc<weeks>(s1-s0).count()));
1113 template<
class CharT,
class Traits>
1115 std::basic_ostream<CharT, Traits>&
1118 return os << ywn.
year() <<
"-W last";
1139 return wn_.ok() && wd_.ok();
1165 : (
static_cast<unsigned>(x.
weekday()) < static_cast<unsigned>(y.weekday())));
1192 template<
class CharT,
class Traits>
1194 std::basic_ostream<CharT, Traits>&
1197 return os << md.
weeknum() <<
'-' << md.weekday();
1239 return static_cast<unsigned>(x.
weekday()) < static_cast<unsigned>(y.weekday());
1266 template<
class CharT,
class Traits>
1268 std::basic_ostream<CharT, Traits>&
1271 return os <<
"W last-" << md.
weekday();
1314 year_lastweek_weekday::operator
sys_days() const NOEXCEPT
1333 return y_.ok() && wd_.ok();
1359 : (
static_cast<unsigned>(x.
weekday()) < static_cast<unsigned>(y.weekday())));
1410 template<
class CharT,
class Traits>
1412 std::basic_ostream<CharT, Traits>&
1415 return os << ywnwd.
year() <<
"-W last-" << ywnwd.
weekday();
1434 , wn_(ylwwd.weeknum())
1435 , wd_(ylwwd.weekday())
1472 year_weeknum_weekday::operator
sys_days() const NOEXCEPT
1497 year_weeknum_weekday::from_days(
days d) NOEXCEPT
1509 static_cast<unsigned>(date::trunc<weeks>(dp - start).count() + 1));
1538 : (
static_cast<unsigned>(x.
weekday()) < static_cast<unsigned>(y.weekday())))));
1589 template<
class CharT,
class Traits>
1591 std::basic_ostream<CharT, Traits>&
1612 return y/
weeknum(static_cast<unsigned>(wn));
1636 return wn/
weekday{
static_cast<unsigned>(wd)};
1652 return weeknum{
static_cast<unsigned>(wn)}/wd;
1668 return wn /
weekday{
static_cast<unsigned>(wd)};
1692 return ywn /
weekday(static_cast<unsigned>(wd));
1708 return wnwd /
year{y};
1716 return {ylw.
year(), wd};
1724 return ylw /
weekday(static_cast<unsigned>(wd));
1740 return lwwd /
year{y};
1745 #endif // ISO_WEEK_H
CONSTCD11 iso_week::weeknum weeknum() const NOEXCEPT
Definition: iso_week.h:1131
year_weeknum & operator+=(const years &dy) NOEXCEPT
Definition: iso_week.h:905
CONSTCD14 bool ok() const NOEXCEPT
Definition: iso_week.h:1489
year & operator-=(const years &y) NOEXCEPT
Definition: iso_week.h:600
CONSTCD11 bool ok() const NOEXCEPT
Definition: iso_week.h:603
CONSTDATA date::month dec
Definition: date.h:1847
local_time< days > local_days
Definition: date.h:172
CONSTCD11 year_weeknum_weekday(const iso_week::year &y, const iso_week::weeknum &wn, const iso_week::weekday &wd) NOEXCEPT
Definition: iso_week.h:1422
CONSTCD14 weekday operator-(const weekday &x, const days &y) NOEXCEPT
Definition: iso_week.h:552
CONSTCD11 bool ok() const NOEXCEPT
Definition: iso_week.h:1023
CONSTDATA iso_week::weekday fri
Definition: iso_week.h:753
CONSTCD14 bool ok() const NOEXCEPT
Definition: iso_week.h:1137
#define NOEXCEPT
Definition: date.h:124
Definition: iso_week.h:48
date::local_days local_days
Definition: iso_week.h:44
CONSTCD11 year_weeknum(const iso_week::year &y, const iso_week::weeknum &wn) NOEXCEPT
Definition: iso_week.h:891
Definition: iso_week.h:333
Definition: iso_week.h:280
CONSTCD11 date::year year() const NOEXCEPT
Definition: date.h:2617
static CONSTCD11 year max() NOEXCEPT
Definition: iso_week.h:621
std::chrono::duration< int, std::ratio_multiply< std::ratio< 146097, 400 >, days::period > > years
Definition: date.h:153
weeknum & operator-=(const weeks &y) NOEXCEPT
Definition: iso_week.h:783
CONSTCD11 iso_week::weekday weekday() const NOEXCEPT
Definition: iso_week.h:1310
CONSTCD11 year(int y) NOEXCEPT
Definition: iso_week.h:594
weeknum & operator--() NOEXCEPT
Definition: iso_week.h:770
Definition: iso_week.h:94
weekday & operator-=(const days &d) NOEXCEPT
Definition: iso_week.h:484
CONSTDATA iso_week::weekday wed
Definition: iso_week.h:751
sys_time< days > sys_days
Definition: date.h:163
CONSTCD11 iso_week::weekday weekday() const NOEXCEPT
Definition: iso_week.h:1132
year_lastweek_weekday & operator-=(const years &y) NOEXCEPT
Definition: iso_week.h:1294
CONSTCD14 bool ok() const NOEXCEPT
Definition: iso_week.h:1213
CONSTCD11 weeknum(unsigned wn) NOEXCEPT
Definition: iso_week.h:764
CONSTCD11 bool operator<(const year &x, const year &y) NOEXCEPT
Definition: iso_week.h:650
Definition: iso_week.h:30
std::chrono::duration< int, std::ratio_multiply< std::ratio< 7 >, days::period > > weeks
Definition: date.h:150
CONSTDATA iso_week::last_week last
Definition: iso_week.h:746
CONSTCD11 bool ok() const NOEXCEPT
Definition: iso_week.h:898
CONSTCD11 iso_week::weeknum weeknum() const NOEXCEPT
Definition: iso_week.h:1467
weekday & operator++() NOEXCEPT
Definition: iso_week.h:469
CONSTCD11 bool operator==(const weekday &x, const weekday &y) NOEXCEPT
Definition: iso_week.h:509
CONSTCD11 iso_week::year year() const NOEXCEPT
Definition: iso_week.h:896
CONSTCD11 bool operator<=(const year &x, const year &y) NOEXCEPT
Definition: iso_week.h:666
CONSTCD11 iso_week::year year() const NOEXCEPT
Definition: iso_week.h:1300
CONSTCD11 weekday(unsigned wd) NOEXCEPT
Definition: iso_week.h:447
CONSTCD11 year_lastweek_weekday(const iso_week::year &y, const iso_week::weekday &wd) NOEXCEPT
Definition: iso_week.h:1278
weekday & operator--() NOEXCEPT
Definition: iso_week.h:471
CONSTCD11 weeknum_weekday(const iso_week::weeknum &wn, const iso_week::weekday &wd) NOEXCEPT
Definition: iso_week.h:1125
weeknum & operator+=(const weeks &y) NOEXCEPT
Definition: iso_week.h:775
CONSTDATA iso_week::weekday thu
Definition: iso_week.h:752
year_lastweek_weekday & operator+=(const years &y) NOEXCEPT
Definition: iso_week.h:1286
std::chrono::duration< int, std::ratio_multiply< std::ratio< 24 >, std::chrono::hours::period > > days
Definition: date.h:147
#define CONSTDATA
Definition: date.h:121
Definition: iso_week.h:247
date::days days
Definition: iso_week.h:37
Definition: iso_week.h:371
CONSTCD11 bool operator>=(const year &x, const year &y) NOEXCEPT
Definition: iso_week.h:674
date::weeks weeks
Definition: iso_week.h:38
Definition: iso_week.h:213
CONSTCD11 iso_week::weekday weekday() const NOEXCEPT
Definition: iso_week.h:1468
date::sys_days sys_days
Definition: iso_week.h:43
year & operator+=(const years &y) NOEXCEPT
Definition: iso_week.h:599
year & operator++() NOEXCEPT
Definition: iso_week.h:595
year_weeknum & operator-=(const years &dy) NOEXCEPT
Definition: iso_week.h:913
#define CONSTCD14
Definition: date.h:123
date::years years
Definition: iso_week.h:39
auto operator+=(std::string &lhs, StringRef const &sr) -> std::string &
CONSTCD11 bool ok() const NOEXCEPT
Definition: iso_week.h:504
Definition: iso_week.h:176
CONSTCD11 bool ok() const NOEXCEPT
Definition: iso_week.h:1331
CONSTCD11 lastweek_weekday(const iso_week::weekday &wd) NOEXCEPT
Definition: iso_week.h:1204
CONSTCD14 weekday operator+(const weekday &x, const days &y) NOEXCEPT
Definition: iso_week.h:534
CONSTDATA iso_week::weekday sun
Definition: iso_week.h:748
CONSTCD11 iso_week::year year() const NOEXCEPT
Definition: iso_week.h:1010
CONSTCD14 iso_week::weeknum weeknum() const NOEXCEPT
Definition: iso_week.h:1305
CONSTCD11 iso_week::weekday weekday() const NOEXCEPT
Definition: iso_week.h:1208
CONSTDATA iso_week::weekday mon
Definition: iso_week.h:749
weeknum & operator++() NOEXCEPT
Definition: iso_week.h:768
year_weeknum_weekday & operator+=(const years &y) NOEXCEPT
Definition: iso_week.h:1452
year & operator--() NOEXCEPT
Definition: iso_week.h:597
CONSTCD11 bool operator!=(const weekday &x, const weekday &y) NOEXCEPT
Definition: iso_week.h:517
CONSTDATA iso_week::weekday sat
Definition: iso_week.h:754
CONSTCD11 bool ok() const NOEXCEPT
Definition: iso_week.h:790
CONSTCD14 iso_week::weeknum weeknum() const NOEXCEPT
Definition: iso_week.h:1015
year_weeknum_weekday & operator-=(const years &y) NOEXCEPT
Definition: iso_week.h:1460
CONSTCD11 year_weeknum operator/(const year &y, const weeknum &wn) NOEXCEPT
Definition: iso_week.h:1602
CONSTDATA iso_week::weekday tue
Definition: iso_week.h:750
year_lastweek & operator+=(const years &dy) NOEXCEPT
Definition: iso_week.h:1027
Definition: iso_week.h:136
weekday & operator+=(const days &d) NOEXCEPT
Definition: iso_week.h:476
CONSTCD11 year_lastweek(const iso_week::year &y) NOEXCEPT
Definition: iso_week.h:1006
CONSTCD11 bool operator>(const year &x, const year &y) NOEXCEPT
Definition: iso_week.h:658
CONSTCD11 iso_week::year year() const NOEXCEPT
Definition: iso_week.h:1466
Definition: iso_week.h:308
year_lastweek & operator-=(const years &dy) NOEXCEPT
Definition: iso_week.h:1035
CONSTCD11 iso_week::weeknum weeknum() const NOEXCEPT
Definition: iso_week.h:897
static CONSTCD11 year min() NOEXCEPT
Definition: iso_week.h:608
#define CONSTCD11
Definition: date.h:122