diff options
| author | Finlay Davidson <finlay.davidson@coderclass.nl> | 2023-03-16 22:08:51 +0100 |
|---|---|---|
| committer | Riku Isokoski <riksu9000@gmail.com> | 2023-03-27 22:12:32 +0000 |
| commit | 616aa91b4c373dd49e60ac8b6b5c942ebc5804c9 (patch) | |
| tree | 954967ccc7fba99ff38d62ae605b3d4afe2a467f /src/utility | |
| parent | 47931f41d579371c9c78ae7061317bf28848db2f (diff) | |
dirtyvalue: Move to src/utility
Diffstat (limited to 'src/utility')
| -rw-r--r-- | src/utility/DirtyValue.h | 39 |
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 + }; + } +} |
