Mercurial > minori
diff 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 diff
--- a/include/core/date.h Wed Dec 06 11:47:59 2023 -0500 +++ b/include/core/date.h Wed Dec 06 13:43:54 2023 -0500 @@ -1,9 +1,9 @@ #ifndef __core__date_h #define __core__date_h -#include "core/json.h" -#include <QDate> -#include <cstdint> +#include "json/json_fwd.hpp" + +class QDate; class Date { public: @@ -31,9 +31,22 @@ private: /* this implementation sucks and we should really use a struct instead */ - std::shared_ptr<unsigned int> year; - std::shared_ptr<unsigned int> month; - std::shared_ptr<unsigned int> day; + 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
