@@ -73,11 +73,11 @@ class ParNode : public IReactiveNode
7373// //////////////////////////////////////////////////////////////////////////////////////
7474// / ShiftRequestData
7575// //////////////////////////////////////////////////////////////////////////////////////
76- struct ShiftRequestData
76+ struct DynRequestData
7777{
78- ParNode* ShiftingNode ;
79- ParNode* OldParent ;
80- ParNode* NewParent ;
78+ bool ShouldAttach ;
79+ ParNode* Node ;
80+ ParNode* Parent ;
8181};
8282
8383// //////////////////////////////////////////////////////////////////////////////////////
@@ -122,7 +122,9 @@ class SeqEngineBase : public EngineBase<SeqNode,TTurn>
122122{
123123public:
124124 void OnTurnPropagate (TTurn& turn);
125- void OnNodeShift (SeqNode& node, SeqNode& oldParent, SeqNode& newParent, TTurn& turn);
125+
126+ void OnDynamicNodeAttach (SeqNode& node, SeqNode& parent, TTurn& turn);
127+ void OnDynamicNodeDetach (SeqNode& node, SeqNode& parent, TTurn& turn);
126128
127129private:
128130 virtual void processChildren (SeqNode& node, TTurn& turn) override ;
@@ -135,19 +137,22 @@ template <typename TTurn>
135137class ParEngineBase : public EngineBase <ParNode,TTurn>
136138{
137139public:
138- using ConcNodeVectorT = concurrent_vector<ParNode*>;
139- using ShiftRequestVectorT = concurrent_vector<ShiftRequestData >;
140+ using ConcNodeVectT = concurrent_vector<ParNode*>;
141+ using DynRequestVectT = concurrent_vector<DynRequestData >;
140142
141143 void OnTurnPropagate (TTurn& turn);
142- void OnNodeShift (ParNode& node, ParNode& oldParent, ParNode& newParent, TTurn& turn);
144+
145+ void OnDynamicNodeAttach (ParNode& node, ParNode& parent, TTurn& turn);
146+ void OnDynamicNodeDetach (ParNode& node, ParNode& parent, TTurn& turn);
143147
144148private:
145- void applyShift (ParNode& node, ParNode& oldParent, ParNode& newParent, TTurn& turn);
149+ void applyDynamicAttach (ParNode& node, ParNode& parent, TTurn& turn);
150+ void applyDynamicDetach (ParNode& node, ParNode& parent, TTurn& turn);
146151
147152 virtual void processChildren (ParNode& node, TTurn& turn) override ;
148153
149- ConcNodeVectorT collectBuffer_;
150- ShiftRequestVectorT shiftRequests_ ;
154+ ConcNodeVectT collectBuffer_;
155+ DynRequestVectT dynRequests_ ;
151156};
152157
153158// //////////////////////////////////////////////////////////////////////////////////////
@@ -165,10 +170,10 @@ class QueuingParEngine : public DefaultQueuingEngine<ParEngineBase,ExclusiveTurn
165170class PipeliningTurn : public TurnBase
166171{
167172public:
168- using ConcNodeVectorT = concurrent_vector<ParNode*>;
173+ using ConcNodeVectT = concurrent_vector<ParNode*>;
169174 using NodeVectT = vector<ParNode*>;
170175 using IntervalSetT = set<pair<int ,int >>;
171- using ShiftRequestVectorT = concurrent_vector<ShiftRequestData >;
176+ using DynRequestVectT = concurrent_vector<DynRequestData >;
172177 using TopoQueueT = TopoQueue<ParNode>;
173178
174179 PipeliningTurn (TurnIdT id, TurnFlagsT flags);
@@ -213,8 +218,8 @@ class PipeliningTurn : public TurnBase
213218 void RunMergedInputs () const ;
214219
215220 TopoQueueT ScheduledNodes;
216- ConcNodeVectorT CollectBuffer;
217- ShiftRequestVectorT ShiftRequests ;
221+ ConcNodeVectT CollectBuffer;
222+ DynRequestVectT DynRequests ;
218223 task_group Tasks;
219224
220225private:
@@ -259,7 +264,8 @@ class PipeliningEngine : public IReactiveEngine<ParNode,PipeliningTurn>
259264
260265 void OnTurnPropagate (PipeliningTurn& turn);
261266
262- void OnNodeShift (ParNode& node, ParNode& oldParent, ParNode& newParent, PipeliningTurn& turn);
267+ void OnDynamicNodeAttach (ParNode& node, ParNode& parent, PipeliningTurn& turn);
268+ void OnDynamicNodeDetach (ParNode& node, ParNode& parent, PipeliningTurn& turn);
263269
264270 template <typename F>
265271 inline bool TryMerge (F&& inputFunc)
@@ -282,7 +288,9 @@ class PipeliningEngine : public IReactiveEngine<ParNode,PipeliningTurn>
282288 }
283289
284290private:
285- void applyShift (ParNode& node, ParNode& oldParent, ParNode& newParent, PipeliningTurn& turn);
291+ void applyDynamicAttach (ParNode& node, ParNode& parent, PipeliningTurn& turn);
292+ void applyDynamicDetach (ParNode& node, ParNode& parent, PipeliningTurn& turn);
293+
286294 void processChildren (ParNode& node, PipeliningTurn& turn);
287295 void invalidateSuccessors (ParNode& node);
288296
0 commit comments