Sparkle 0.0.1
Loading...
Searching...
No Matches
spk_observable_value.hpp
1// spk_observable_value.hpp
2#pragma once
3
4#include "structure/design_pattern/spk_contract_provider.hpp"
5
6namespace spk
7{
8 template <typename TType>
22 {
23 public:
32
33 private:
34 TType _value{};
35 spk::TContractProvider<TType> _onEditionContractProvider;
36
37 public:
41 ObservableValue() = default;
42
47 explicit ObservableValue(const TType &p_value) :
48 _value(p_value)
49 {
50 }
51
56 explicit ObservableValue(TType &&p_value) :
57 _value(std::move(p_value))
58 {
59 }
60
65 operator TType() const
66 {
67 return (_value);
68 }
69
74 const TType &get() const
75 {
76 return (_value);
77 }
78
83 void set(const TType &p_value)
84 {
85 _value = p_value;
86 _onEditionContractProvider.trigger(_value);
87 }
88
93 void set(TType &&p_value)
94 {
95 _value = std::move(p_value);
96 _onEditionContractProvider.trigger(_value);
97 }
98
104 {
105 return _onEditionContractProvider;
106 }
107
113 {
114 return _onEditionContractProvider;
115 }
116
122 ObservableValue &operator=(const TType &p_value)
123 {
124 set(p_value);
125 return *this;
126 }
127
133 ObservableValue &operator=(TType &&p_value)
134 {
135 set(std::move(p_value));
136 return *this;
137 }
138
144 ObservableValue &operator+=(const TType &p_value)
145 {
146 _value += p_value;
147 _onEditionContractProvider.trigger(_value);
148 return *this;
149 }
150
156 ObservableValue &operator-=(const TType &p_value)
157 {
158 _value -= p_value;
159 _onEditionContractProvider.trigger(_value);
160 return *this;
161 }
162
168 ObservableValue &operator*=(const TType &p_value)
169 {
170 _value *= p_value;
171 _onEditionContractProvider.trigger(_value);
172 return *this;
173 }
174
180 ObservableValue &operator/=(const TType &p_value)
181 {
182 _value /= p_value;
183 _onEditionContractProvider.trigger(_value);
184 return *this;
185 }
186
192 ObservableValue &operator%=(const TType &p_value)
193 {
194 _value %= p_value;
195 _onEditionContractProvider.trigger(_value);
196 return *this;
197 }
198
204 ObservableValue &operator&=(const TType &p_value)
205 {
206 _value &= p_value;
207 _onEditionContractProvider.trigger(_value);
208 return *this;
209 }
210
216 ObservableValue &operator|=(const TType &p_value)
217 {
218 _value |= p_value;
219 _onEditionContractProvider.trigger(_value);
220 return *this;
221 }
222
228 ObservableValue &operator^=(const TType &p_value)
229 {
230 _value ^= p_value;
231 _onEditionContractProvider.trigger(_value);
232 return *this;
233 }
234
240 ObservableValue &operator<<=(const TType &p_value)
241 {
242 _value <<= p_value;
243 _onEditionContractProvider.trigger(_value);
244 return *this;
245 }
246
252 ObservableValue &operator>>=(const TType &p_value)
253 {
254 _value >>= p_value;
255 _onEditionContractProvider.trigger(_value);
256 return *this;
257 }
258 };
259}
ObservableValue & operator>>=(const TType &p_value)
Applies right shift in-place and notifies subscribers.
Definition spk_observable_value.hpp:252
ObservableValue & operator/=(const TType &p_value)
Divides by a value in-place and notifies subscribers.
Definition spk_observable_value.hpp:180
const TType & get() const
Returns the stored value.
Definition spk_observable_value.hpp:74
ObservableValue & operator+=(const TType &p_value)
Adds a value in-place and notifies subscribers.
Definition spk_observable_value.hpp:144
const spk::TContractProvider< TType > & onEdition() const
Returns the contract provider for mutation events.
Definition spk_observable_value.hpp:112
ObservableValue & operator&=(const TType &p_value)
Applies bitwise AND in-place and notifies subscribers.
Definition spk_observable_value.hpp:204
ObservableValue & operator*=(const TType &p_value)
Multiplies by a value in-place and notifies subscribers.
Definition spk_observable_value.hpp:168
spk::TContractProvider< TType >::Contract Contract
Contract type for subscriptions.
Definition spk_observable_value.hpp:27
void set(TType &&p_value)
Moves a value in and notifies subscribers.
Definition spk_observable_value.hpp:93
ObservableValue & operator<<=(const TType &p_value)
Applies left shift in-place and notifies subscribers.
Definition spk_observable_value.hpp:240
spk::TContractProvider< TType >::Job Job
Job type dispatched on updates.
Definition spk_observable_value.hpp:31
ObservableValue(const TType &p_value)
Builds an observable with an initial value copy.
Definition spk_observable_value.hpp:47
ObservableValue & operator|=(const TType &p_value)
Applies bitwise OR in-place and notifies subscribers.
Definition spk_observable_value.hpp:216
ObservableValue & operator%=(const TType &p_value)
Applies modulo in-place and notifies subscribers.
Definition spk_observable_value.hpp:192
ObservableValue & operator^=(const TType &p_value)
Applies bitwise XOR in-place and notifies subscribers.
Definition spk_observable_value.hpp:228
ObservableValue()=default
Builds an observable with a default-initialized value.
ObservableValue(TType &&p_value)
Builds an observable by moving the initial value.
Definition spk_observable_value.hpp:56
ObservableValue & operator=(const TType &p_value)
Assigns a new value and notifies subscribers.
Definition spk_observable_value.hpp:122
void set(const TType &p_value)
Sets the value and notifies subscribers.
Definition spk_observable_value.hpp:83
ObservableValue & operator-=(const TType &p_value)
Subtracts a value in-place and notifies subscribers.
Definition spk_observable_value.hpp:156
ObservableValue & operator=(TType &&p_value)
Moves a new value in and notifies subscribers.
Definition spk_observable_value.hpp:133
spk::TContractProvider< TType > & onEdition()
Returns the contract provider for mutation events.
Definition spk_observable_value.hpp:103
Handle to a subscribed job that can be resigned or triggered.
Definition spk_contract_provider.hpp:42
Publishes callbacks (contracts) and allows blocking, delaying, or triggering them with arguments.
Definition spk_contract_provider.hpp:29
typename Contract::Job Job
Alias to the subscribed callback signature.
Definition spk_contract_provider.hpp:267
STL namespace.