InfiniTime.git

ref: e5b73212f6addcfdb5e306df63d7135e543c4f8d

src/utility/DirtyValue.h


 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
    };
  }
}