NexusForce 1.0.0
A rigorously engineered full-stack C++ backend library.
载入中...
搜索中...
未找到
state.hpp
浏览该文件的文档.
1#ifndef NEFORCE_TUI_DOM_STATE_HPP__
2#define NEFORCE_TUI_DOM_STATE_HPP__
3
10
13NEFORCE_BEGIN_NAMESPACE__
14NEFORCE_BEGIN_TUI__
15
20
22class component_base;
24
25
35template <typename T>
36class state {
37public:
40
47 state(component_base* owner, strand& s, T initial) :
48 value_(_NEFORCE move(initial)),
49 strand_(&s),
50 owner_(owner) {}
51
52 ~state() = default;
53
54 state(const state&) = delete;
55 state& operator=(const state&) = delete;
56 state(state&&) = delete;
57 state& operator=(state&&) = delete;
58
63 NEFORCE_NODISCARD const T& value() const noexcept { return value_; }
64
69 NEFORCE_NODISCARD const T& operator*() const noexcept { return value_; }
70
75 NEFORCE_NODISCARD const T* operator->() const noexcept { return &value_; }
76
83 value_ = _NEFORCE move(v);
84 notify_changed();
85 return *this;
86 }
87
92 void modify(function<void(T&)> fn) {
93 fn(value_);
94 notify_changed();
95 }
96
103 void set_quiet(T v) {
104 value_ = _NEFORCE move(v);
105 on_changed_.emit(value_);
106 dirty_ = true;
107 }
108
114 void notify() {
115 if (dirty_) {
116 dirty_ = false;
117 schedule_render();
118 }
119 }
120
126 connection on_change(function<void(const T&)> fn) {
127 return on_changed_.connect([fn = _NEFORCE move(fn)](const T& val) { fn(val); });
128 }
129
130private:
131 T value_;
132 changed_signal on_changed_;
133 strand* strand_;
134 component_base* owner_;
135 bool dirty_ = false;
136
137 void notify_changed() {
138 on_changed_.emit(value_);
139 schedule_render();
140 }
141
142 void schedule_render();
143};
144 // TUI
146
147NEFORCE_END_TUI__
148NEFORCE_END_NAMESPACE__
149#endif // NEFORCE_TUI_DOM_STATE_HPP__
函数包装器主模板声明
串行化执行器
响应式状态变量
connection on_change(function< void(const T &)> fn)
订阅值变化通知
state & operator=(T v)
整值替换
const T & operator*() const noexcept
读取当前值
const T * operator->() const noexcept
成员访问
signal< T > changed_signal
值变化信号类型
const T & value() const noexcept
读取当前值
void set_quiet(T v)
静默写入
void modify(function< void(T &)> fn)
就地修改
state(component_base *owner, strand &s, T initial)
构造函数
void notify()
手动触发重渲染
constexpr Iterator2 move(Iterator1 first, Iterator1 last, Iterator2 result) noexcept(noexcept(inner::__move_aux(first, last, result)))
移动范围元素
信号槽机制
串行化执行器