comparison src/core/date.cc @ 197:c4ca035c565d

*: misc. patches
author Paper <mrpapersonic@gmail.com>
date Fri, 08 Dec 2023 11:19:54 -0500
parents f0ff06a45c42
children bc1ae1810855
comparison
equal deleted inserted replaced
196:f0ff06a45c42 197:c4ca035c565d
5 #include <QDebug> 5 #include <QDebug>
6 6
7 #include <algorithm> 7 #include <algorithm>
8 8
9 /* An implementation of AniList's "fuzzy date" */ 9 /* An implementation of AniList's "fuzzy date" */
10
11 template<typename T>
12 bool CLAMP(T x, T low, T high) {
13 return std::max(low, std::min(high, x));
14 }
15 10
16 Date::Date() { 11 Date::Date() {
17 } 12 }
18 13
19 Date::Date(unsigned int y) { 14 Date::Date(unsigned int y) {
55 void Date::VoidDay() { 50 void Date::VoidDay() {
56 day.reset(); 51 day.reset();
57 } 52 }
58 53
59 void Date::SetYear(unsigned int y) { 54 void Date::SetYear(unsigned int y) {
60 year = y; 55 year.emplace(y);
61 } 56 }
62 57
63 void Date::SetMonth(unsigned int m) { 58 void Date::SetMonth(unsigned int m) {
64 month = CLAMP(m, 1U, 12U); 59 month.emplace(std::clamp(m, 1U, 12U));
65 } 60 }
66 61
67 void Date::SetDay(unsigned int d) { 62 void Date::SetDay(unsigned int d) {
68 day = CLAMP(d, 1U, 31U); 63 day.emplace(std::clamp(d, 1U, 31U));
69 } 64 }
70 65
71 unsigned int Date::GetYear() const { 66 std::optional<unsigned int> Date::GetYear() const {
72 return year.value_or(-1); 67 return year;
73 } 68 }
74 69
75 unsigned int Date::GetMonth() const { 70 std::optional<unsigned int> Date::GetMonth() const {
76 return month.value_or(-1); 71 return month;
77 } 72 }
78 73
79 unsigned int Date::GetDay() const { 74 std::optional<unsigned int> Date::GetDay() const {
80 return day.value_or(-1); 75 return day;
81 } 76 }
82 77
83 bool Date::IsValid() const { 78 bool Date::IsValid() const {
84 return year.has_value() && month.has_value() && day.has_value(); 79 return year.has_value() && month.has_value() && day.has_value();
85 }
86
87 bool Date::operator<(const Date& other) const {
88 const unsigned int y = GetYear(), m = GetMonth(), d = GetDay();
89 const unsigned int o_y = other.GetYear(), o_m = other.GetMonth(), o_d = other.GetDay();
90
91 return (y < o_y && m < o_m && d < o_d);
92 }
93
94 bool Date::operator>(const Date& other) const {
95 return other < (*this);
96 }
97
98 bool Date::operator<=(const Date& other) const {
99 return !((*this) > other);
100 }
101
102 bool Date::operator>=(const Date& other) const {
103 return !((*this) < other);
104 } 80 }
105 81
106 QDate Date::GetAsQDate() const { 82 QDate Date::GetAsQDate() const {
107 /* QDate doesn't support "missing" values (for good reason), 83 /* QDate doesn't support "missing" values (for good reason),
108 * so we do our best and return what we can. 84 * so we do our best and return what we can.