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