Skip to content

Commit 1f24f0f

Browse files
committed
-TurnFlags+TransactionFlags
1 parent 7a52758 commit 1f24f0f

11 files changed

Lines changed: 106 additions & 93 deletions

File tree

include/react/Algorithm.h

Lines changed: 41 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,43 @@ enum class Token;
3939
template <typename D, typename ... TValues>
4040
class SignalPack;
4141

42+
///////////////////////////////////////////////////////////////////////////////////////////////////
43+
/// Hold - Hold the most recent event in a signal
44+
///////////////////////////////////////////////////////////////////////////////////////////////////
45+
template
46+
<
47+
typename D,
48+
typename V,
49+
typename T = typename std::decay<V>::type
50+
>
51+
auto Hold(const Events<D,T>& events, V&& init)
52+
-> Signal<D,T>
53+
{
54+
using REACT_IMPL::HoldNode;
55+
56+
return Signal<D,T>(
57+
std::make_shared<HoldNode<D,T>>(
58+
std::forward<V>(init), events.NodePtr()));
59+
}
60+
61+
///////////////////////////////////////////////////////////////////////////////////////////////////
62+
/// Monitor - Emits value changes of target signal
63+
///////////////////////////////////////////////////////////////////////////////////////////////////
64+
template
65+
<
66+
typename D,
67+
typename S
68+
>
69+
auto Monitor(const Signal<D,S>& target)
70+
-> Events<D,S>
71+
{
72+
using REACT_IMPL::MonitorNode;
73+
74+
return Events<D,S>(
75+
std::make_shared<MonitorNode<D, S>>(
76+
target.NodePtr()));
77+
}
78+
4279
///////////////////////////////////////////////////////////////////////////////////////////////////
4380
/// Iterate - Iteratively combines signal value with values from event stream
4481
///////////////////////////////////////////////////////////////////////////////////////////////////
@@ -123,25 +160,6 @@ auto Iterate(const Events<D,E>& events, V&& init,
123160
depPack.Data);
124161
}
125162

126-
///////////////////////////////////////////////////////////////////////////////////////////////////
127-
/// Hold - Hold the most recent event in a signal
128-
///////////////////////////////////////////////////////////////////////////////////////////////////
129-
template
130-
<
131-
typename D,
132-
typename V,
133-
typename T = typename std::decay<V>::type
134-
>
135-
auto Hold(const Events<D,T>& events, V&& init)
136-
-> Signal<D,T>
137-
{
138-
using REACT_IMPL::HoldNode;
139-
140-
return Signal<D,T>(
141-
std::make_shared<HoldNode<D,T>>(
142-
std::forward<V>(init), events.NodePtr()));
143-
}
144-
145163
///////////////////////////////////////////////////////////////////////////////////////////////////
146164
/// Snapshot - Sets signal value to value of other signal when event is received
147165
///////////////////////////////////////////////////////////////////////////////////////////////////
@@ -161,23 +179,7 @@ auto Snapshot(const Events<D,E>& trigger, const Signal<D,S>& target)
161179
target.NodePtr(), trigger.NodePtr()));
162180
}
163181

164-
///////////////////////////////////////////////////////////////////////////////////////////////////
165-
/// Monitor - Emits value changes of target signal
166-
///////////////////////////////////////////////////////////////////////////////////////////////////
167-
template
168-
<
169-
typename D,
170-
typename S
171-
>
172-
auto Monitor(const Signal<D,S>& target)
173-
-> Events<D,S>
174-
{
175-
using REACT_IMPL::MonitorNode;
176182

177-
return Events<D,S>(
178-
std::make_shared<MonitorNode<D, S>>(
179-
target.NodePtr()));
180-
}
181183

182184
///////////////////////////////////////////////////////////////////////////////////////////////////
183185
/// Pulse - Emits value of target signal when event is received
@@ -199,29 +201,29 @@ auto Pulse(const Events<D,E>& trigger, const Signal<D,S>& target)
199201
}
200202

201203
///////////////////////////////////////////////////////////////////////////////////////////////////
202-
/// OnChanged - Emits token when target signal was changed
204+
/// Changed - Emits token when target signal was changed
203205
///////////////////////////////////////////////////////////////////////////////////////////////////
204206
template
205207
<
206208
typename D,
207209
typename S
208210
>
209-
auto OnChanged(const Signal<D,S>& target)
211+
auto Changed(const Signal<D,S>& target)
210212
-> Events<D,Token>
211213
{
212214
return Monitor(target).Tokenize();
213215
}
214216

215217
///////////////////////////////////////////////////////////////////////////////////////////////////
216-
/// OnChangedTo - Emits token when target signal was changed to value
218+
/// ChangedTo - Emits token when target signal was changed to value
217219
///////////////////////////////////////////////////////////////////////////////////////////////////
218220
template
219221
<
220222
typename D,
221223
typename V,
222224
typename S = typename std::decay<V>::type
223225
>
224-
auto OnChangedTo(const Signal<D,S>& target, V&& value)
226+
auto ChangedTo(const Signal<D,S>& target, V&& value)
225227
-> Events<D,Token>
226228
{
227229
return Monitor(target)

include/react/Domain.h

Lines changed: 26 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -68,10 +68,10 @@ class SignalPack;
6868
///////////////////////////////////////////////////////////////////////////////////////////////////
6969
/// Common types & constants
7070
///////////////////////////////////////////////////////////////////////////////////////////////////
71-
using REACT_IMPL::TurnFlagsT;
71+
using REACT_IMPL::TransactionFlagsT;
7272

73-
// ETurnFlags
74-
using REACT_IMPL::ETurnFlags;
73+
// ETransactionFlags
74+
using REACT_IMPL::ETransactionFlags;
7575
using REACT_IMPL::allow_merging;
7676

7777
#ifdef REACT_ENABLE_LOGGING
@@ -87,9 +87,8 @@ enum EDomainMode
8787
parallel_concurrent
8888
};
8989

90-
// Expose enum types so aliases for engines can be declared, but don't
90+
// Expose enum type so aliases for engines can be declared, but don't
9191
// expose the actual enum values as they are reserved for internal use.
92-
using REACT_IMPL::EInputMode;
9392
using REACT_IMPL::EPropagationMode;
9493

9594
///////////////////////////////////////////////////////////////////////////////////////////////////
@@ -101,21 +100,26 @@ class TransactionStatus
101100
using PtrT = REACT_IMPL::WaitingStatePtrT;
102101

103102
public:
104-
TransactionStatus() :
103+
inline TransactionStatus() :
105104
statePtr_( StateT::Create() )
106105
{}
107106

108-
TransactionStatus(const TransactionStatus&) = default;
107+
TransactionStatus(const TransactionStatus&) = delete;
108+
TransactionStatus& operator=(const TransactionStatus&) = delete;
109109

110-
TransactionStatus(TransactionStatus&& other) :
110+
inline TransactionStatus(TransactionStatus&& other) :
111111
statePtr_( std::move(other.statePtr_) )
112-
{}
113-
114-
TransactionStatus& operator=(const TransactionStatus&) = default;
112+
{
113+
other.statePtr_ = StateT::Create();
114+
}
115115

116-
TransactionStatus& operator=(TransactionStatus&& other)
116+
inline TransactionStatus& operator=(TransactionStatus&& other)
117117
{
118-
statePtr_ = std::move(other.statePtr_);
118+
if (this != &other)
119+
{
120+
statePtr_ = std::move(other.statePtr_);
121+
other.statePtr_ = StateT::Create();
122+
}
119123
return *this;
120124
}
121125

@@ -132,7 +136,7 @@ class TransactionStatus
132136
friend void AsyncTransaction(TransactionStatus& status, F&& func);
133137

134138
template <typename D, typename F>
135-
friend void AsyncTransaction(TurnFlagsT flags, TransactionStatus& status, F&& func);
139+
friend void AsyncTransaction(TransactionFlagsT flags, TransactionStatus& status, F&& func);
136140
};
137141

138142
///////////////////////////////////////////////////////////////////////////////////////////////////
@@ -242,7 +246,7 @@ template
242246
typename S,
243247
typename FIn
244248
>
245-
auto MakeContinuation(TurnFlagsT flags, const Signal<D,S>& trigger, FIn&& func)
249+
auto MakeContinuation(TransactionFlagsT flags, const Signal<D,S>& trigger, FIn&& func)
246250
-> Continuation<D,DOut>
247251
{
248252
static_assert(DOut::is_concurrent,
@@ -279,7 +283,7 @@ template
279283
typename E,
280284
typename FIn
281285
>
282-
auto MakeContinuation(TurnFlagsT flags, const Events<D,E>& trigger, FIn&& func)
286+
auto MakeContinuation(TransactionFlagsT flags, const Events<D,E>& trigger, FIn&& func)
283287
-> Continuation<D,DOut>
284288
{
285289
static_assert(DOut::is_concurrent,
@@ -317,7 +321,7 @@ template
317321
typename FIn,
318322
typename ... TDepValues
319323
>
320-
auto MakeContinuation(TurnFlagsT flags, const Events<D,E>& trigger,
324+
auto MakeContinuation(TransactionFlagsT flags, const Events<D,E>& trigger,
321325
const SignalPack<D,TDepValues...>& depPack, FIn&& func)
322326
-> Continuation<D,DOut>
323327
{
@@ -329,7 +333,7 @@ auto MakeContinuation(TurnFlagsT flags, const Events<D,E>& trigger,
329333

330334
struct NodeBuilder_
331335
{
332-
NodeBuilder_(TurnFlagsT flags, const Events<D,E>& trigger, FIn&& func) :
336+
NodeBuilder_(TransactionFlagsT flags, const Events<D,E>& trigger, FIn&& func) :
333337
MyFlags( flags ),
334338
MyTrigger( trigger ),
335339
MyFunc( std::forward<FIn>(func) )
@@ -345,7 +349,7 @@ auto MakeContinuation(TurnFlagsT flags, const Events<D,E>& trigger,
345349
std::forward<FIn>(MyFunc), deps.NodePtr() ...));
346350
}
347351

348-
TurnFlagsT MyFlags;
352+
TransactionFlagsT MyFlags;
349353
const Events<D,E>& MyTrigger;
350354
FIn MyFunc;
351355
};
@@ -381,7 +385,7 @@ void DoTransaction(F&& func)
381385
}
382386

383387
template <typename D, typename F>
384-
void DoTransaction(TurnFlagsT flags, F&& func)
388+
void DoTransaction(TransactionFlagsT flags, F&& func)
385389
{
386390
using REACT_IMPL::DomainSpecificInputManager;
387391
DomainSpecificInputManager<D>::Instance().DoTransaction(flags, std::forward<F>(func));
@@ -401,7 +405,7 @@ void AsyncTransaction(F&& func)
401405
}
402406

403407
template <typename D, typename F>
404-
void AsyncTransaction(TurnFlagsT flags, F&& func)
408+
void AsyncTransaction(TransactionFlagsT flags, F&& func)
405409
{
406410
static_assert(D::is_concurrent, "AsyncTransaction requires concurrent domain.");
407411

@@ -422,7 +426,7 @@ void AsyncTransaction(TransactionStatus& status, F&& func)
422426
}
423427

424428
template <typename D, typename F>
425-
void AsyncTransaction(TurnFlagsT flags, TransactionStatus& status, F&& func)
429+
void AsyncTransaction(TransactionFlagsT flags, TransactionStatus& status, F&& func)
426430
{
427431
static_assert(D::is_concurrent, "AsyncTransaction requires concurrent domain.");
428432

include/react/detail/EngineBase.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@
3434
class TurnBase
3535
{
3636
public:
37-
inline TurnBase(TurnIdT id, TurnFlagsT flags) :
37+
inline TurnBase(TurnIdT id, TransactionFlagsT flags) :
3838
id_( id )
3939
{}
4040

0 commit comments

Comments
 (0)