aboutsummaryrefslogtreecommitdiffstats
path: root/src/utility
diff options
context:
space:
mode:
authorFinlay Davidson <finlay.davidson@coderclass.nl>2023-03-16 22:08:51 +0100
committerRiku Isokoski <riksu9000@gmail.com>2023-03-27 22:12:32 +0000
commit616aa91b4c373dd49e60ac8b6b5c942ebc5804c9 (patch)
tree954967ccc7fba99ff38d62ae605b3d4afe2a467f /src/utility
parent47931f41d579371c9c78ae7061317bf28848db2f (diff)
dirtyvalue: Move to src/utility
Diffstat (limited to 'src/utility')
-rw-r--r--src/utility/DirtyValue.h39
1 files changed, 39 insertions, 0 deletions
diff --git a/src/utility/DirtyValue.h b/src/utility/DirtyValue.h
new file mode 100644
index 00000000..8d5147aa
--- /dev/null
+++ b/src/utility/DirtyValue.h
@@ -0,0 +1,39 @@
+#pragma once
+
+namespace Pinetime {
+ namespace Utility {
+ template <class T>
+ class DirtyValue {
+ public:
+ DirtyValue() = default; // Use NSDMI
+
+ explicit DirtyValue(T const& v) : value {v} {
+ } // Use MIL and const-lvalue-ref
+
+ bool IsUpdated() {
+ if (this->isUpdated) {
+ this->isUpdated = false;
+ return true;
+ }
+ return false;
+ }
+
+ T const& Get() {
+ this->isUpdated = false;
+ return value;
+ } // never expose a non-const lvalue-ref
+
+ DirtyValue& operator=(const T& other) {
+ if (this->value != other) {
+ this->value = other;
+ this->isUpdated = true;
+ }
+ return *this;
+ }
+
+ private:
+ T value {}; // NSDMI - default initialise type
+ bool isUpdated {true}; // NSDMI - use brace initialisation
+ };
+ }
+}