Skip to content

Commit e7d5581

Browse files
committed
Tick returns update result again. Will be required by future algorithm.
1 parent e436276 commit e7d5581

6 files changed

Lines changed: 81 additions & 33 deletions

File tree

include/react/graph/ConversionNodes.h

Lines changed: 37 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ class FoldBaseNode : public SignalNode<D,S>
3939
{
4040
}
4141

42-
virtual void Tick(void* turnPtr) override
42+
virtual EUpdateResult Tick(void* turnPtr) override
4343
{
4444
using TurnT = typename D::Engine::TurnT;
4545
TurnT& turn = *static_cast<TurnT*>(turnPtr);
@@ -56,12 +56,12 @@ class FoldBaseNode : public SignalNode<D,S>
5656
{
5757
value_ = newValue;
5858
Engine::OnNodePulse(*this, turn);
59-
return;
59+
return EUpdateResult::changed;
6060
}
6161
else
6262
{
6363
Engine::OnNodeIdlePulse(*this, turn);
64-
return;
64+
return EUpdateResult::unchanged;
6565
}
6666
}
6767

@@ -186,7 +186,7 @@ class HoldNode : public SignalNode<D,S>
186186

187187
virtual const char* GetNodeType() const override { return "HoldNode"; }
188188

189-
virtual void Tick(void* turnPtr) override
189+
virtual EUpdateResult Tick(void* turnPtr) override
190190
{
191191
using TurnT = typename D::Engine::TurnT;
192192
TurnT& turn = *static_cast<TurnT*>(turnPtr);
@@ -210,9 +210,15 @@ class HoldNode : public SignalNode<D,S>
210210
GetObjectId(*this), turn.Id()));
211211

212212
if (changed)
213+
{
213214
Engine::OnNodePulse(*this, turn);
215+
return EUpdateResult::changed;
216+
}
214217
else
218+
{
215219
Engine::OnNodeIdlePulse(*this, turn);
220+
return EUpdateResult::unchanged;
221+
}
216222
}
217223

218224
virtual int DependencyCount() const override { return 1; }
@@ -252,7 +258,7 @@ class SnapshotNode : public SignalNode<D,S>
252258

253259
virtual const char* GetNodeType() const override { return "SnapshotNode"; }
254260

255-
virtual void Tick(void* turnPtr) override
261+
virtual EUpdateResult Tick(void* turnPtr) override
256262
{
257263
using TurnT = typename D::Engine::TurnT;
258264
TurnT& turn = *static_cast<TurnT*>(turnPtr);
@@ -278,9 +284,15 @@ class SnapshotNode : public SignalNode<D,S>
278284
GetObjectId(*this), turn.Id(), std::this_thread::get_id().hash()));
279285

280286
if (changed)
287+
{
281288
Engine::OnNodePulse(*this, turn);
289+
return EUpdateResult::changed;
290+
}
282291
else
292+
{
283293
Engine::OnNodeIdlePulse(*this, turn);
294+
return EUpdateResult::unchanged;
295+
}
284296
}
285297

286298
virtual int DependencyCount() const override { return 2; }
@@ -317,7 +329,7 @@ class MonitorNode : public EventStreamNode<D,E>
317329

318330
virtual const char* GetNodeType() const override { return "MonitorNode"; }
319331

320-
virtual void Tick(void* turnPtr) override
332+
virtual EUpdateResult Tick(void* turnPtr) override
321333
{
322334
using TurnT = typename D::Engine::TurnT;
323335
TurnT& turn = *static_cast<TurnT*>(turnPtr);
@@ -333,9 +345,15 @@ class MonitorNode : public EventStreamNode<D,E>
333345
GetObjectId(*this), turn.Id()));
334346

335347
if (events_.size() > 0)
336-
Engine::OnNodePulse(*this, *static_cast<TurnT*>(turnPtr));
348+
{
349+
Engine::OnNodePulse(*this, turn);
350+
return EUpdateResult::changed;
351+
}
337352
else
338-
Engine::OnNodeIdlePulse(*this, *static_cast<TurnT*>(turnPtr));
353+
{
354+
Engine::OnNodeIdlePulse(*this, turn);
355+
return EUpdateResult::unchanged;
356+
}
339357
}
340358

341359
virtual int DependencyCount() const override { return 1; }
@@ -375,7 +393,7 @@ class PulseNode : public EventStreamNode<D,S>
375393

376394
virtual const char* GetNodeType() const override { return "PulseNode"; }
377395

378-
virtual void Tick(void* turnPtr) override
396+
virtual EUpdateResult Tick(void* turnPtr) override
379397
{
380398
typedef typename D::Engine::TurnT TurnT;
381399
TurnT& turn = *static_cast<TurnT*>(turnPtr);
@@ -393,9 +411,15 @@ class PulseNode : public EventStreamNode<D,S>
393411
GetObjectId(*this), turn.Id()));
394412

395413
if (events_.size() > 0)
414+
{
396415
Engine::OnNodePulse(*this, turn);
416+
return EUpdateResult::changed;
417+
}
397418
else
419+
{
398420
Engine::OnNodeIdlePulse(*this, turn);
421+
return EUpdateResult::unchanged;
422+
}
399423
}
400424

401425
virtual int DependencyCount() const { return 2; }
@@ -438,7 +462,7 @@ class EventFlattenNode : public EventStreamNode<D, TInner>
438462

439463
virtual bool IsDynamicNode() const override { return true; }
440464

441-
virtual void Tick(void* turnPtr) override
465+
virtual EUpdateResult Tick(void* turnPtr) override
442466
{
443467
typedef typename D::Engine::TurnT TurnT;
444468
TurnT& turn = *static_cast<TurnT*>(turnPtr);
@@ -459,7 +483,7 @@ class EventFlattenNode : public EventStreamNode<D, TInner>
459483
Engine::OnDynamicNodeDetach(*this, *oldInner, turn);
460484
Engine::OnDynamicNodeAttach(*this, *newInner, turn);
461485

462-
return;
486+
return EUpdateResult::invalidated;
463487
}
464488

465489
REACT_LOG(D::Log().template Append<NodeEvaluateBeginEvent>(
@@ -473,12 +497,12 @@ class EventFlattenNode : public EventStreamNode<D, TInner>
473497
if (events_.size() > 0)
474498
{
475499
Engine::OnNodePulse(*this, *static_cast<TurnT*>(turnPtr));
476-
return;
500+
return EUpdateResult::changed;
477501
}
478502
else
479503
{
480504
Engine::OnNodeIdlePulse(*this, *static_cast<TurnT*>(turnPtr));
481-
return;
505+
return EUpdateResult::unchanged;
482506
}
483507
}
484508

include/react/graph/EventStreamNodes.h

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -109,10 +109,10 @@ class EventSourceNode :
109109

110110
virtual const char* GetNodeType() const override { return "EventSourceNode"; }
111111

112-
virtual void Tick(void* turnPtr) override
112+
virtual EUpdateResult Tick(void* turnPtr) override
113113
{
114114
REACT_ASSERT(false, "Don't tick the EventSourceNode\n");
115-
return;
115+
return EUpdateResult::none;
116116
}
117117

118118
virtual bool IsInputNode() const override { return true; }
@@ -399,7 +399,7 @@ class EventOpNode : public EventStreamNode<D,E>
399399

400400
virtual const char* GetNodeType() const override { return "EventOpNode"; }
401401

402-
virtual void Tick(void* turnPtr) override
402+
virtual EUpdateResult Tick(void* turnPtr) override
403403
{
404404
using TurnT = typename D::Engine::TurnT;
405405
TurnT& turn = *static_cast<TurnT*>(turnPtr);
@@ -415,9 +415,15 @@ class EventOpNode : public EventStreamNode<D,E>
415415
GetObjectId(*this), turn.Id()));
416416

417417
if (! events_.empty())
418+
{
418419
Engine::OnNodePulse(*this, turn);
420+
return EUpdateResult::changed;
421+
}
419422
else
423+
{
420424
Engine::OnNodeIdlePulse(*this, turn);
425+
return EUpdateResult::unchanged;
426+
}
421427
}
422428

423429
virtual int DependencyCount() const override

include/react/graph/ObserverNodes.h

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,7 @@ class SignalObserverNode : public ObserverNode<D>
7777

7878
virtual const char* GetNodeType() const override { return "SignalObserverNode"; }
7979

80-
virtual void Tick(void* turnPtr) override
80+
virtual EUpdateResult Tick(void* turnPtr) override
8181
{
8282
using TurnT = typename D::Engine::TurnT;
8383
TurnT& turn = *static_cast<TurnT*>(turnPtr);
@@ -100,7 +100,7 @@ class SignalObserverNode : public ObserverNode<D>
100100
REACT_LOG(D::Log().template Append<NodeEvaluateEndEvent>(
101101
GetObjectId(*this), turn.Id()));
102102

103-
return;
103+
return EUpdateResult::none;
104104
}
105105

106106
virtual int DependencyCount() const { return 1; }
@@ -154,7 +154,7 @@ class EventObserverNode : public ObserverNode<D>
154154

155155
virtual const char* GetNodeType() const override { return "EventObserverNode"; }
156156

157-
virtual void Tick(void* turnPtr) override
157+
virtual EUpdateResult Tick(void* turnPtr) override
158158
{
159159
using TurnT = typename D::Engine::TurnT;
160160
TurnT& turn = *static_cast<TurnT*>(turnPtr);
@@ -180,7 +180,7 @@ class EventObserverNode : public ObserverNode<D>
180180
REACT_LOG(D::Log().template Append<NodeEvaluateEndEvent>(
181181
GetObjectId(*this), turn.Id()));
182182

183-
return;
183+
return EUpdateResult::none;
184184
}
185185

186186
virtual int DependencyCount() const { return 1; }

include/react/graph/ReactorNodes.h

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -87,9 +87,10 @@ class ReactorNode :
8787

8888
virtual const char* GetNodeType() const override { return "ReactorNode"; }
8989

90-
virtual bool IsDynamicNode() const override { return true; }
90+
virtual bool IsDynamicNode() const override { return true; }
91+
virtual bool IsOutputNode() const override { return true; }
9192

92-
virtual void Tick(void* turnPtr) override
93+
virtual EUpdateResult Tick(void* turnPtr) override
9394
{
9495
turnPtr_ = static_cast<TurnT*>(turnPtr);
9596
REACT_SCOPE_EXIT{ turnPtr_ = nullptr; };
@@ -102,12 +103,12 @@ class ReactorNode :
102103
Engine::OnDynamicNodeAttach(*this, *depPtr, *turnPtr_);
103104
++depCount_;
104105

105-
return;
106+
return EUpdateResult::invalidated;
106107
}
107108

108109
offsets_.clear();
109110

110-
return;
111+
return EUpdateResult::none;
111112
}
112113

113114
virtual int DependencyCount() const override

include/react/graph/SignalNodes.h

Lines changed: 15 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -48,10 +48,10 @@ class SignalNode : public ReactiveNode<D,S,S>
4848

4949
virtual const char* GetNodeType() const override { return "SignalNode"; }
5050

51-
virtual void Tick(void* turnPtr) override
51+
virtual EUpdateResult Tick(void* turnPtr) override
5252
{
5353
REACT_ASSERT(false, "Don't tick SignalNode\n");
54-
return;
54+
return EUpdateResult::none;
5555
}
5656

5757
const S& ValueRef() const
@@ -97,10 +97,10 @@ class VarNode :
9797

9898
virtual const char* GetNodeType() const override { return "VarNode"; }
9999

100-
virtual void Tick(void* turnPtr) override
100+
virtual EUpdateResult Tick(void* turnPtr) override
101101
{
102102
REACT_ASSERT(false, "Don't tick the VarNode\n");
103-
return;
103+
return EUpdateResult::none;
104104
}
105105

106106
virtual bool IsInputNode() const override { return true; }
@@ -223,7 +223,7 @@ class SignalOpNode : public SignalNode<D,S>
223223

224224
virtual const char* GetNodeType() const override { return "SignalOpNode"; }
225225

226-
virtual void Tick(void* turnPtr) override
226+
virtual EUpdateResult Tick(void* turnPtr) override
227227
{
228228
using TurnT = typename D::Engine::TurnT;
229229
TurnT& turn = *static_cast<TurnT*>(turnPtr);
@@ -249,9 +249,15 @@ class SignalOpNode : public SignalNode<D,S>
249249
GetObjectId(*this), turn.Id()));
250250

251251
if (changed)
252+
{
252253
Engine::OnNodePulse(*this, turn);
254+
return EUpdateResult::changed;
255+
}
253256
else
257+
{
254258
Engine::OnNodeIdlePulse(*this, turn);
259+
return EUpdateResult::unchanged;
260+
}
255261
}
256262

257263
virtual int DependencyCount() const override
@@ -305,7 +311,7 @@ class FlattenNode : public SignalNode<D,TInner>
305311

306312
virtual bool IsDynamicNode() const override { return true; }
307313

308-
virtual void Tick(void* turnPtr) override
314+
virtual EUpdateResult Tick(void* turnPtr) override
309315
{
310316
using TurnT = typename D::Engine::TurnT;
311317
TurnT& turn = *static_cast<TurnT*>(turnPtr);
@@ -321,7 +327,7 @@ class FlattenNode : public SignalNode<D,TInner>
321327
Engine::OnDynamicNodeDetach(*this, *oldInner, turn);
322328
Engine::OnDynamicNodeAttach(*this, *newInner, turn);
323329

324-
return;
330+
return EUpdateResult::invalidated;
325331
}
326332

327333
REACT_LOG(D::Log().template Append<NodeEvaluateBeginEvent>(
@@ -336,10 +342,12 @@ class FlattenNode : public SignalNode<D,TInner>
336342
{
337343
value_ = newValue;
338344
Engine::OnNodePulse(*this, turn);
345+
return EUpdateResult::changed;
339346
}
340347
else
341348
{
342349
Engine::OnNodeIdlePulse(*this, turn);
350+
return EUpdateResult::unchanged;
343351
}
344352
}
345353

include/react/interface/IReactiveNode.h

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,15 @@
1010

1111
/***************************************/ REACT_IMPL_BEGIN /**************************************/
1212

13+
14+
enum class EUpdateResult
15+
{
16+
none,
17+
unchanged,
18+
changed,
19+
invalidated
20+
};
21+
1322
///////////////////////////////////////////////////////////////////////////////////////////////////
1423
/// IReactiveNode
1524
///////////////////////////////////////////////////////////////////////////////////////////////////
@@ -22,15 +31,15 @@ struct IReactiveNode
2231

2332
// Note: Could get rid of this ugly ptr by adding a template parameter to the interface
2433
// But that would mean all engine nodes need that template parameter too - so rather cast
25-
virtual void Tick(void* turnPtr) = 0;
34+
virtual EUpdateResult Tick(void* turnPtr) = 0;
2635

2736
/// Input nodes can be manipulated externally.
2837
virtual bool IsInputNode() const = 0;
2938

3039
/// Output nodes can't have any successors.
3140
virtual bool IsOutputNode() const = 0;
3241

33-
/// This node can have successors and may be re-attached to other nodes.
42+
/// May change in topology as a result of tick.
3443
virtual bool IsDynamicNode() const = 0;
3544

3645
virtual int DependencyCount() const = 0;

0 commit comments

Comments
 (0)