Mercurial > minori
view include/core/date.h @ 187:9613d72b097e
*: multiple performance improvements
like marking `static const` when it makes sense...
date: change old stupid heap-based method to a structure which should
make copying the thing actually make a copy.
also many performance-based changes, like removing the std::tie
dependency and forward-declaring nlohmann json
*: replace every instance of QString::fromUtf8 to Strings::ToQString.
the main difference is that our function will always convert exactly
what is in the string, while some other times it would only convert
up to the nearest NUL byte
| author | Paper <mrpapersonic@gmail.com> |
|---|---|
| date | Wed, 06 Dec 2023 13:43:54 -0500 |
| parents | f88eda79c60a |
| children | f0ff06a45c42 |
line wrap: on
line source
#ifndef __core__date_h #define __core__date_h #include "json/json_fwd.hpp" class QDate; class Date { public: Date(); Date(unsigned int y); Date(unsigned int y, unsigned int m, unsigned int d); Date(const QDate& date); Date(const nlohmann::json& json); bool IsValid() const; void SetYear(unsigned int y); void SetMonth(unsigned int m); void SetDay(unsigned int d); void VoidYear(); void VoidMonth(); void VoidDay(); unsigned int GetYear() const; unsigned int GetMonth() const; unsigned int GetDay() const; QDate GetAsQDate() const; nlohmann::json GetAsAniListJson() const; bool operator<(const Date& other) const; bool operator>(const Date& other) const; bool operator<=(const Date& other) const; bool operator>=(const Date& other) const; private: /* this implementation sucks and we should really use a struct instead */ template<typename T> struct OptionalNumber { public: T Get() const { return enabled ? num : 0; } bool Enabled() const { return enabled; } void Set(T n) { num = n; enabled = true; } void Void() { num = 0; enabled = false; } protected: T num = 0; bool enabled = false; }; OptionalNumber<unsigned int> year; OptionalNumber<unsigned int> month; OptionalNumber<unsigned int> day; }; #endif // __core__date_h
