aboutsummaryrefslogtreecommitdiffstats
path: root/src/utility/DirtyValue.h
blob: 8d5147aa335ec9993e439eb28935f9ec65ae42b1 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
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
    };
  }
}