HikoGUI
A low latency retained GUI
Loading...
Searching...
No Matches
observable_value.hpp
1// Copyright 2020 Pokitec
2// All rights reserved.
3
4#pragma once
5
6#include "observable_base.hpp"
7
8namespace tt::detail {
9
10template<typename T>
11class observable_value final : public observable_base<T> {
12private:
13 T value;
14
15public:
16 observable_value() noexcept :
17 observable_base<T>(), value() {}
18
19 observable_value(T const &value) noexcept :
20 observable_base<T>(), value(value) {}
21
22 virtual T load() const noexcept override {
23 ttlet lock = std::scoped_lock(observable_base<T>::mutex);
24 return value;
25 }
26
27 virtual bool store(T const &new_value) noexcept override {
29
30 ttlet old_value = value;
31 if (new_value != old_value) {
32 value = new_value;
34 this->notify(old_value, new_value);
35 return true;
36 } else {
38 return false;
39 }
40 }
41};
42
43}
Observable abstract base class.
Definition observable_base.hpp:29
Definition observable_value.hpp:11
virtual bool store(T const &new_value) noexcept override
Set the value.
Definition observable_value.hpp:27
virtual T load() const noexcept override
Get the current value.
Definition observable_value.hpp:22