@@ -67,9 +67,7 @@ class Node : public IReactiveNode
6767// //////////////////////////////////////////////////////////////////////////////////////
6868// / Turn
6969// //////////////////////////////////////////////////////////////////////////////////////
70- class Turn :
71- public TurnBase,
72- public TurnQueueManager::QueueEntry
70+ class Turn : public TurnBase
7371{
7472public:
7573 Turn (TurnIdT id, TurnFlagsT flags);
@@ -78,29 +76,22 @@ class Turn :
7876};
7977
8078// //////////////////////////////////////////////////////////////////////////////////////
81- // / PulseCountO1Engine
79+ // / EngineBase
8280// //////////////////////////////////////////////////////////////////////////////////////
83- class PulseCountO1Engine :
84- public IReactiveEngine<Node,Turn>,
85- public TurnQueueManager
81+ template <typename TTurn>
82+ class EngineBase : public IReactiveEngine <Node,TTurn>
8683{
8784public:
88- PulseCountO1Engine ();
89-
9085 void OnNodeAttach (Node& node, Node& parent);
9186 void OnNodeDetach (Node& node, Node& parent);
9287
93- void OnTurnAdmissionStart (Turn& turn);
94- void OnTurnAdmissionEnd (Turn& turn);
95- void OnTurnEnd (Turn& turn);
96-
97- void OnTurnInputChange (Node& node, Turn& turn);
98- void OnTurnPropagate (Turn& turn);
88+ void OnTurnInputChange (Node& node, TTurn& turn);
89+ void OnTurnPropagate (TTurn& turn);
9990
100- void OnNodePulse (Node& node, Turn & turn);
101- void OnNodeIdlePulse (Node& node, Turn & turn);
91+ void OnNodePulse (Node& node, TTurn & turn);
92+ void OnNodeIdlePulse (Node& node, TTurn & turn);
10293
103- void OnNodeShift (Node& node, Node& oldParent, Node& newParent, Turn & turn);
94+ void OnNodeShift (Node& node, Node& oldParent, Node& newParent, TTurn & turn);
10495
10596private:
10697 typedef Node::ShiftMutexT NodeShiftMutexT;
@@ -110,22 +101,32 @@ class PulseCountO1Engine :
110101
111102 void updateNodeWeight (Node& node, MarkerT marker, int weightDelta, int costDelta);
112103
113- void processChild (Node& node, bool update, Turn & turn);
114- void nudgeChildren (Node& parent, bool update, Turn & turn);
104+ void processChild (Node& node, bool update, TTurn & turn);
105+ void nudgeChildren (Node& parent, bool update, TTurn & turn);
115106
116107 MarkerT nextMarker ();
117108
118109 task_group tasks_;
119- MarkerT curMarker_;
110+ MarkerT curMarker_ = 1 ;
120111
121112 NodeVectorT changedInputs_;
122113};
123114
115+ class BasicEngine : public EngineBase <Turn> {};
116+ class QueuingEngine : public DefaultQueuingEngine <EngineBase,Turn> {};
117+
124118} // ~namespace pulsecount_o1
125119REACT_IMPL_END
126120
127121REACT_BEGIN
128122
129- using REACT_IMPL::pulsecount_o1::PulseCountO1Engine;
123+ struct parallel ;
124+ struct parallel_queuing ;
125+
126+ template <typename TMode = parallel_queuing>
127+ class PulseCountO1Engine ;
128+
129+ template <> class PulseCountO1Engine <parallel> : public REACT_IMPL::pulsecount_o1::BasicEngine {};
130+ template <> class PulseCountO1Engine <parallel_queuing> : public REACT_IMPL::pulsecount_o1::QueuingEngine {};
130131
131132REACT_END
0 commit comments