2 //===----------------------------------------------------------------------===//
4 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
5 // See https://llvm.org/LICENSE.txt for license information.
6 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
8 //===----------------------------------------------------------------------===//
10 #ifndef _LIBCPP___CHRONO_MONTH_WEEKDAY_H
11 #define _LIBCPP___CHRONO_MONTH_WEEKDAY_H
13 #include <__chrono/month.h>
14 #include <__chrono/weekday.h>
17 #if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
18 # pragma GCC system_header
21 #if _LIBCPP_STD_VER >= 20
23 _LIBCPP_BEGIN_NAMESPACE_STD
31 chrono::weekday_indexed __wdi_
;
33 _LIBCPP_HIDE_FROM_ABI
constexpr month_weekday(const chrono::month
& __mval
, const chrono::weekday_indexed
& __wdival
) noexcept
34 : __m_
{__mval
}, __wdi_
{__wdival
} {}
35 _LIBCPP_HIDE_FROM_ABI
inline constexpr chrono::month
month() const noexcept
{ return __m_
; }
36 _LIBCPP_HIDE_FROM_ABI
inline constexpr chrono::weekday_indexed
weekday_indexed() const noexcept
{ return __wdi_
; }
37 _LIBCPP_HIDE_FROM_ABI
inline constexpr bool ok() const noexcept
{ return __m_
.ok() && __wdi_
.ok(); }
40 _LIBCPP_HIDE_FROM_ABI
inline constexpr
41 bool operator==(const month_weekday
& __lhs
, const month_weekday
& __rhs
) noexcept
42 { return __lhs
.month() == __rhs
.month() && __lhs
.weekday_indexed() == __rhs
.weekday_indexed(); }
44 _LIBCPP_HIDE_FROM_ABI
inline constexpr
45 month_weekday
operator/(const month
& __lhs
, const weekday_indexed
& __rhs
) noexcept
46 { return month_weekday
{__lhs
, __rhs
}; }
48 _LIBCPP_HIDE_FROM_ABI
inline constexpr
49 month_weekday
operator/(int __lhs
, const weekday_indexed
& __rhs
) noexcept
50 { return month_weekday
{month(__lhs
), __rhs
}; }
52 _LIBCPP_HIDE_FROM_ABI
inline constexpr
53 month_weekday
operator/(const weekday_indexed
& __lhs
, const month
& __rhs
) noexcept
54 { return month_weekday
{__rhs
, __lhs
}; }
56 _LIBCPP_HIDE_FROM_ABI
inline constexpr
57 month_weekday
operator/(const weekday_indexed
& __lhs
, int __rhs
) noexcept
58 { return month_weekday
{month(__rhs
), __lhs
}; }
61 class month_weekday_last
{
63 chrono::weekday_last __wdl_
;
65 _LIBCPP_HIDE_FROM_ABI
constexpr month_weekday_last(const chrono::month
& __mval
, const chrono::weekday_last
& __wdlval
) noexcept
66 : __m_
{__mval
}, __wdl_
{__wdlval
} {}
67 _LIBCPP_HIDE_FROM_ABI
inline constexpr chrono::month
month() const noexcept
{ return __m_
; }
68 _LIBCPP_HIDE_FROM_ABI
inline constexpr chrono::weekday_last
weekday_last() const noexcept
{ return __wdl_
; }
69 _LIBCPP_HIDE_FROM_ABI
inline constexpr bool ok() const noexcept
{ return __m_
.ok() && __wdl_
.ok(); }
72 _LIBCPP_HIDE_FROM_ABI
inline constexpr
73 bool operator==(const month_weekday_last
& __lhs
, const month_weekday_last
& __rhs
) noexcept
74 { return __lhs
.month() == __rhs
.month() && __lhs
.weekday_last() == __rhs
.weekday_last(); }
76 _LIBCPP_HIDE_FROM_ABI
inline constexpr
77 month_weekday_last
operator/(const month
& __lhs
, const weekday_last
& __rhs
) noexcept
78 { return month_weekday_last
{__lhs
, __rhs
}; }
80 _LIBCPP_HIDE_FROM_ABI
inline constexpr
81 month_weekday_last
operator/(int __lhs
, const weekday_last
& __rhs
) noexcept
82 { return month_weekday_last
{month(__lhs
), __rhs
}; }
84 _LIBCPP_HIDE_FROM_ABI
inline constexpr
85 month_weekday_last
operator/(const weekday_last
& __lhs
, const month
& __rhs
) noexcept
86 { return month_weekday_last
{__rhs
, __lhs
}; }
88 _LIBCPP_HIDE_FROM_ABI
inline constexpr
89 month_weekday_last
operator/(const weekday_last
& __lhs
, int __rhs
) noexcept
90 { return month_weekday_last
{month(__rhs
), __lhs
}; }
93 _LIBCPP_END_NAMESPACE_STD
95 #endif // _LIBCPP_STD_VER >= 20
97 #endif // _LIBCPP___CHRONO_MONTH_WEEKDAY_H