tetl 0.1.0
Embedded Template Library
Loading...
Searching...
No Matches
year.hpp
Go to the documentation of this file.
1// SPDX-License-Identifier: BSL-1.0
2
3#ifndef TETL_CHRONO_YEAR_HPP
4#define TETL_CHRONO_YEAR_HPP
5
10
11namespace etl::chrono {
12
13struct year {
14 year() = default;
15
16 constexpr explicit year(int y) noexcept
17 : _count{static_cast<int16_t>(y)}
18 {
19 }
20
21 constexpr auto operator++() noexcept -> year&
22 {
23 ++_count;
24 return *this;
25 }
26
27 constexpr auto operator++(int) noexcept -> year { return year{_count++}; }
28
29 constexpr auto operator--() noexcept -> year&
30 {
31 --_count;
32 return *this;
33 }
34
35 constexpr auto operator--(int) noexcept -> year { return year{_count--}; }
36
37 constexpr auto operator+=(years const& countS) noexcept -> year&
38 {
39
40 _count = static_cast<int16_t>(_count + countS.count());
41 return *this;
42 }
43
44 constexpr auto operator-=(years const& countS) noexcept -> year&
45 {
46 _count = static_cast<int16_t>(_count - countS.count());
47 return *this;
48 }
49
50 [[nodiscard]] constexpr auto operator+() const noexcept -> year { return *this; }
51
52 [[nodiscard]] constexpr auto operator-() const noexcept -> year { return year{-_count}; }
53
54 [[nodiscard]] constexpr auto is_leap() const noexcept -> bool
55 {
56 return (_count % 4 == 0) and (_count % 100 != 0 or _count % 400 == 0);
57 }
58
59 [[nodiscard]] constexpr explicit operator int() const noexcept { return _count; }
60
61 [[nodiscard]] constexpr auto ok() const noexcept -> bool { return _count != numeric_limits<int16_t>::min(); }
62
63 [[nodiscard]] static constexpr auto min() noexcept -> year { return year{-32767}; }
64
65 [[nodiscard]] static constexpr auto max() noexcept -> year { return year{32767}; }
66
67 friend constexpr auto operator==(year lhs, year rhs) noexcept -> bool
68 {
69 return static_cast<int>(lhs) == static_cast<int>(rhs);
70 }
71
72 friend constexpr auto operator<(year lhs, year rhs) noexcept -> bool
73 {
74 return static_cast<int>(lhs) < static_cast<int>(rhs);
75 }
76
77 friend constexpr auto operator<=(year lhs, year rhs) noexcept -> bool
78 {
79 return static_cast<int>(lhs) <= static_cast<int>(rhs);
80 }
81
82 friend constexpr auto operator>(year lhs, year rhs) noexcept -> bool
83 {
84 return static_cast<int>(lhs) > static_cast<int>(rhs);
85 }
86
87 friend constexpr auto operator>=(year lhs, year rhs) noexcept -> bool
88 {
89 return static_cast<int>(lhs) >= static_cast<int>(rhs);
90 }
91
92private:
93 int16_t _count;
94};
95
96[[nodiscard]] constexpr auto operator+(year const& lhs, years const& rhs) noexcept -> year
97{
98 return year{static_cast<int>(static_cast<int>(lhs) + rhs.count())};
99}
100
101[[nodiscard]] constexpr auto operator+(years const& lhs, year const& rhs) noexcept -> year { return rhs + lhs; }
102
103[[nodiscard]] constexpr auto operator-(year const& lhs, years const& rhs) noexcept -> year { return lhs + -rhs; }
104
105[[nodiscard]] constexpr auto operator-(year const& lhs, year const& rhs) noexcept -> years
106{
107 return years{static_cast<int>(lhs) - static_cast<int>(rhs)};
108}
109
110} // namespace etl::chrono
111
112// NOLINTNEXTLINE(modernize-concat-nested-namespaces)
113namespace etl {
114inline namespace literals {
115inline namespace chrono_literals {
116
118[[nodiscard]] constexpr auto operator""_y(unsigned long long y) noexcept -> etl::chrono::year
119{
120 return etl::chrono::year{static_cast<int>(y)};
121}
122
123} // namespace chrono_literals
124} // namespace literals
125} // namespace etl
126
127namespace etl::chrono {
128using namespace etl::literals::chrono_literals;
129} // namespace etl::chrono
130
131#endif // TETL_CHRONO_YEAR_HPP
Definition abs.hpp:11
constexpr auto operator+(day const &d, days const &ds) noexcept -> day
Definition day.hpp:92
duration< int_least32_t, ratio< 2629746 > > years
Signed integer type of at least 17 bits.
Definition duration.hpp:374
constexpr auto operator-(day const &d, days const &ds) noexcept -> day
Definition day.hpp:102
Definition adjacent_find.hpp:8
TETL_BUILTIN_INT16 int16_t
Signed integer type with width of exactly 16 bits.
Definition int_t.hpp:14
Definition year.hpp:13
constexpr auto operator--(int) noexcept -> year
Definition year.hpp:35
static constexpr auto min() noexcept -> year
Definition year.hpp:63
friend constexpr auto operator>(year lhs, year rhs) noexcept -> bool
Definition year.hpp:82
friend constexpr auto operator<=(year lhs, year rhs) noexcept -> bool
Definition year.hpp:77
friend constexpr auto operator>=(year lhs, year rhs) noexcept -> bool
Definition year.hpp:87
constexpr auto ok() const noexcept -> bool
Definition year.hpp:61
static constexpr auto max() noexcept -> year
Definition year.hpp:65
constexpr year(int y) noexcept
Definition year.hpp:16
constexpr auto operator++(int) noexcept -> year
Definition year.hpp:27
friend constexpr auto operator<(year lhs, year rhs) noexcept -> bool
Definition year.hpp:72
constexpr auto operator++() noexcept -> year &
Definition year.hpp:21
constexpr auto is_leap() const noexcept -> bool
Definition year.hpp:54
constexpr auto operator-=(years const &countS) noexcept -> year &
Definition year.hpp:44
constexpr auto operator+=(years const &countS) noexcept -> year &
Definition year.hpp:37
constexpr auto operator--() noexcept -> year &
Definition year.hpp:29
constexpr auto operator-() const noexcept -> year
Definition year.hpp:52
friend constexpr auto operator==(year lhs, year rhs) noexcept -> bool
Definition year.hpp:67
constexpr auto operator+() const noexcept -> year
Definition year.hpp:50
static constexpr auto min() noexcept
Definition numeric_limits.hpp:20