From 616aa91b4c373dd49e60ac8b6b5c942ebc5804c9 Mon Sep 17 00:00:00 2001 From: Finlay Davidson Date: Thu, 16 Mar 2023 22:08:51 +0100 Subject: dirtyvalue: Move to src/utility --- src/utility/DirtyValue.h | 39 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) create mode 100644 src/utility/DirtyValue.h (limited to 'src/utility') 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 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 + }; + } +} -- cgit v1.2.3-70-g09d2