tetl 0.1.0
Embedded Template Library
Loading...
Searching...
No Matches
year_month.hpp
Go to the documentation of this file.
1// SPDX-License-Identifier: BSL-1.0
2// SPDX-FileCopyrightText: Copyright (C) 2023 Tobias Hienzsch
3
4#ifndef TETL_CHRONO_YEAR_MONTH_HPP
5#define TETL_CHRONO_YEAR_MONTH_HPP
6
7#include <etl/_chrono/month.hpp>
8
9namespace etl::chrono {
10
11/// \ingroup chrono
12struct year_month {
13 year_month() = default;
14
15 constexpr year_month(chrono::year const& y, chrono::month const& m) noexcept
16 : _y{y}
17 , _m{m}
18 {
19 }
20
21 [[nodiscard]] constexpr auto ok() const noexcept -> bool
22 {
23 return year().ok() and month().ok();
24 }
25 [[nodiscard]] constexpr auto year() const noexcept -> chrono::year
26 {
27 return _y;
28 }
29 [[nodiscard]] constexpr auto month() const noexcept -> chrono::month
30 {
31 return _m;
32 }
33
34 constexpr auto operator+=(months const& dm) noexcept -> year_month&;
35 constexpr auto operator-=(months const& dm) noexcept -> year_month&;
36 constexpr auto operator+=(years const& dy) noexcept -> year_month&;
37 constexpr auto operator-=(years const& dy) noexcept -> year_month&;
38
39 friend constexpr auto operator==(year_month const& lhs, year_month const& rhs) noexcept -> bool
40 {
41 return lhs.year() == rhs.year() and lhs.month() == rhs.month();
42 }
43
44private:
45 chrono::year _y;
46 chrono::month _m;
47};
48
49[[nodiscard]] constexpr auto operator+(chrono::year_month const& ym, chrono::years const& dy) noexcept
51{
52 return chrono::year_month{ym.year() + dy, ym.month()};
53}
54
55[[nodiscard]] constexpr auto operator+(chrono::years const& dy, chrono::year_month const& ym) noexcept
57{
58 return chrono::year_month{ym.year() + dy, ym.month()};
59}
60
61[[nodiscard]] constexpr auto operator+(chrono::year_month const& ym, chrono::months const& dm) noexcept
63{
64 return {ym.year(), ym.month() + dm};
65}
66
67[[nodiscard]] constexpr auto operator+(chrono::months const& dm, chrono::year_month const& ym) noexcept
69{
70 return {ym.year(), ym.month() + dm};
71}
72
73[[nodiscard]] constexpr auto operator-(chrono::year_month const& ym, chrono::years const& dy) noexcept
75{
76 return {ym.year() - dy, ym.month()};
77}
78
79[[nodiscard]] constexpr auto operator-(chrono::year_month const& ym, chrono::months const& dm) noexcept
81{
82 return {ym.year(), ym.month() - dm};
83}
84
85// [[nodiscard]] constexpr auto operator-(chrono::year_month const& ym1, chrono::year_month const&
86// ym2) noexcept
87// -> chrono::months
88// {
89// }
90
91constexpr auto year_month::operator+=(months const& dm) noexcept -> year_month&
92{
93 *this = *this + dm;
94 return *this;
95}
96
97constexpr auto year_month::operator-=(months const& dm) noexcept -> year_month&
98{
99 *this = *this - dm;
100 return *this;
101}
102
103constexpr auto year_month::operator+=(years const& dy) noexcept -> year_month&
104{
105 *this = *this + dy;
106 return *this;
107}
108
109constexpr auto year_month::operator-=(years const& dy) noexcept -> year_month&
110{
111 *this = *this - dy;
112 return *this;
113}
114
115[[nodiscard]] constexpr auto operator/(year const& y, month const& m) noexcept -> year_month
116{
117 return year_month{y, m};
118}
119
120[[nodiscard]] constexpr auto operator/(year const& y, int m) noexcept -> year_month
121{
122 return year_month{y, month(static_cast<unsigned>(m))};
123}
124
125} // namespace etl::chrono
126
127#endif // TETL_CHRONO_YEAR_MONTH_HPP
Definition abs.hpp:12
constexpr auto operator+(month const &m, months const &ms) noexcept -> month
Definition month.hpp:78
constexpr auto operator+(chrono::year_month const &ym, chrono::years const &dy) noexcept -> chrono::year_month
Definition year_month.hpp:49
constexpr auto operator-(chrono::year_month const &ym, chrono::years const &dy) noexcept -> chrono::year_month
Definition year_month.hpp:73
constexpr auto operator/(year const &y, month const &m) noexcept -> year_month
Definition year_month.hpp:115
constexpr auto operator/(year const &y, int m) noexcept -> year_month
Definition year_month.hpp:120
constexpr auto operator-(chrono::year_month const &ym, chrono::months const &dm) noexcept -> chrono::year_month
Definition year_month.hpp:79
constexpr auto operator+(chrono::years const &dy, chrono::year_month const &ym) noexcept -> chrono::year_month
Definition year_month.hpp:55
constexpr auto operator==(month lhs, month rhs) noexcept -> bool
Definition month.hpp:53
constexpr auto operator-(month const &m, months const &ms) noexcept -> month
Definition month.hpp:90
constexpr auto operator+(chrono::year_month const &ym, chrono::months const &dm) noexcept -> chrono::year_month
Definition year_month.hpp:61
constexpr auto operator+(chrono::months const &dm, chrono::year_month const &ym) noexcept -> chrono::year_month
Definition year_month.hpp:67
Definition adjacent_find.hpp:9
The class month represents a month in a year.
Definition month.hpp:22
constexpr month(unsigned m) noexcept
Definition month.hpp:25
Definition year_month.hpp:12
friend constexpr auto operator==(year_month const &lhs, year_month const &rhs) noexcept -> bool
Definition year_month.hpp:39
constexpr auto ok() const noexcept -> bool
Definition year_month.hpp:21
constexpr auto month() const noexcept -> chrono::month
Definition year_month.hpp:29
constexpr auto operator-=(months const &dm) noexcept -> year_month &
Definition year_month.hpp:97
constexpr auto operator+=(months const &dm) noexcept -> year_month &
Definition year_month.hpp:91
constexpr auto operator-=(years const &dy) noexcept -> year_month &
Definition year_month.hpp:109
constexpr auto operator+=(years const &dy) noexcept -> year_month &
Definition year_month.hpp:103
constexpr auto year() const noexcept -> chrono::year
Definition year_month.hpp:25
constexpr year_month(chrono::year const &y, chrono::month const &m) noexcept
Definition year_month.hpp:15