@@ -11,17 +11,19 @@ namespace NE
1111
1212SERIALIZATION_INFO (NodeManager, 2 );
1313
14- template <class SlotType >
15- static bool HasDuplicates (const std::vector<SlotType> & slots)
14+ template <typename SlotListType, typename SlotType>
15+ static bool HasDuplicates (const SlotListType & slots)
1616{
17+ bool hasDuplicates = false ;
1718 std::unordered_set<SlotType> slotSet;
18- for ( const SlotType& slot : slots ) {
19+ slots. Enumerate ([&] ( const SlotType& slot) {
1920 if (slotSet.find (slot) != slotSet.end ()) {
20- return true ;
21+ hasDuplicates = true ;
2122 }
2223 slotSet.insert (slot);
23- }
24- return false ;
24+ return !hasDuplicates;
25+ });
26+ return hasDuplicates;
2527}
2628
2729class NodeManagerNodeEvaluator : public NodeEvaluator
@@ -106,6 +108,36 @@ class NodeManagerNodeEvaluatorSetter : public NodeEvaluatorSetter
106108 InitializationMode initMode;
107109};
108110
111+ OutputSlotList::OutputSlotList ()
112+ {
113+
114+ }
115+
116+ OutputSlotList::~OutputSlotList ()
117+ {
118+
119+ }
120+
121+ bool OutputSlotList::IsEmpty () const
122+ {
123+ return GetSize () == 0 ;
124+ }
125+
126+ InputSlotList::InputSlotList ()
127+ {
128+
129+ }
130+
131+ InputSlotList::~InputSlotList ()
132+ {
133+
134+ }
135+
136+ bool InputSlotList::IsEmpty () const
137+ {
138+ return GetSize () == 0 ;
139+ }
140+
109141NodeManager::NodeManager () :
110142 idGenerator (),
111143 nodeList (),
@@ -241,7 +273,7 @@ bool NodeManager::CanConnectOutputSlotToInputSlot (const OutputSlotConstPtr& out
241273 NodeConstPtr outputNode = GetNode (outputSlot->GetOwnerNodeId ());
242274 NodeConstPtr inputNode = GetNode (inputSlot->GetOwnerNodeId ());
243275 if (DBGERROR (outputNode == nullptr || inputNode == nullptr )) {
244- return true ;
276+ return false ;
245277 }
246278
247279 bool willCreateCycle = false ;
@@ -262,46 +294,50 @@ bool NodeManager::CanConnectOutputSlotToInputSlot (const OutputSlotConstPtr& out
262294 return true ;
263295}
264296
265- bool NodeManager::CanConnectOutputSlotsToInputSlot (const std::vector<OutputSlotConstPtr> & outputSlots, const InputSlotConstPtr& inputSlot) const
297+ bool NodeManager::CanConnectOutputSlotsToInputSlot (const OutputSlotList & outputSlots, const InputSlotConstPtr& inputSlot) const
266298{
267- if (DBGERROR (outputSlots.empty () || inputSlot == nullptr )) {
299+ if (DBGERROR (outputSlots.IsEmpty () || inputSlot == nullptr )) {
268300 return false ;
269301 }
270302
271- if (HasDuplicates (outputSlots)) {
303+ if (HasDuplicates<OutputSlotList, OutputSlotConstPtr> (outputSlots)) {
272304 return false ;
273305 }
274306
275- if (outputSlots.size () > 1 && inputSlot->GetOutputSlotConnectionMode () != OutputSlotConnectionMode::Multiple) {
307+ if (outputSlots.GetSize () > 1 && inputSlot->GetOutputSlotConnectionMode () != OutputSlotConnectionMode::Multiple) {
276308 return false ;
277309 }
278310
279- for (const OutputSlotConstPtr& outputSlot : outputSlots) {
311+ bool canConnect = true ;
312+ outputSlots.Enumerate ([&] (const OutputSlotConstPtr& outputSlot) {
280313 if (!CanConnectOutputSlotToInputSlot (outputSlot, inputSlot)) {
281- return false ;
314+ canConnect = false ;
282315 }
283- }
316+ return canConnect;
317+ });
284318
285- return true ;
319+ return canConnect ;
286320}
287321
288- bool NodeManager::CanConnectOutputSlotToInputSlots (const OutputSlotConstPtr& outputSlot, const std::vector<InputSlotConstPtr> & inputSlots) const
322+ bool NodeManager::CanConnectOutputSlotToInputSlots (const OutputSlotConstPtr& outputSlot, const InputSlotList & inputSlots) const
289323{
290- if (DBGERROR (outputSlot == nullptr || inputSlots.empty ())) {
324+ if (DBGERROR (outputSlot == nullptr || inputSlots.IsEmpty ())) {
291325 return false ;
292326 }
293327
294- if (HasDuplicates (inputSlots)) {
328+ if (HasDuplicates<InputSlotList, InputSlotConstPtr> (inputSlots)) {
295329 return false ;
296330 }
297331
298- for (const InputSlotConstPtr& inputSlot : inputSlots) {
332+ bool canConnect = true ;
333+ inputSlots.Enumerate ([&] (const InputSlotConstPtr& inputSlot) {
299334 if (!CanConnectOutputSlotToInputSlot (outputSlot, inputSlot)) {
300- return false ;
335+ canConnect = false ;
301336 }
302- }
337+ return canConnect;
338+ });
303339
304- return true ;
340+ return canConnect ;
305341}
306342
307343bool NodeManager::ConnectOutputSlotToInputSlot (const OutputSlotConstPtr& outputSlot, const InputSlotConstPtr& inputSlot)
@@ -314,34 +350,38 @@ bool NodeManager::ConnectOutputSlotToInputSlot (const OutputSlotConstPtr& output
314350 return connectionManager.ConnectOutputSlotToInputSlot (outputSlot, inputSlot);
315351}
316352
317- bool NodeManager::ConnectOutputSlotsToInputSlot (const std::vector<OutputSlotConstPtr> & outputSlots, const InputSlotConstPtr& inputSlot)
353+ bool NodeManager::ConnectOutputSlotsToInputSlot (const OutputSlotList & outputSlots, const InputSlotConstPtr& inputSlot)
318354{
319355 if (DBGERROR (!CanConnectOutputSlotsToInputSlot (outputSlots, inputSlot))) {
320356 return false ;
321357 }
322358
323- for (const OutputSlotConstPtr& outputSlot : outputSlots) {
359+ bool success = true ;
360+ outputSlots.Enumerate ([&] (const OutputSlotConstPtr& outputSlot) {
324361 if (DBGERROR (!ConnectOutputSlotToInputSlot (outputSlot, inputSlot))) {
325- return false ;
362+ success = false ;
326363 }
327- }
364+ return success;
365+ });
328366
329- return true ;
367+ return success ;
330368}
331369
332- bool NodeManager::ConnectOutputSlotToInputSlots (const OutputSlotConstPtr& outputSlot, const std::vector<InputSlotConstPtr> & inputSlots)
370+ bool NodeManager::ConnectOutputSlotToInputSlots (const OutputSlotConstPtr& outputSlot, const InputSlotList & inputSlots)
333371{
334372 if (DBGERROR (!CanConnectOutputSlotToInputSlots (outputSlot, inputSlots))) {
335373 return false ;
336374 }
337375
338- for (const InputSlotConstPtr& inputSlot : inputSlots) {
376+ bool success = true ;
377+ inputSlots.Enumerate ([&] (const InputSlotConstPtr& inputSlot) {
339378 if (DBGERROR (!ConnectOutputSlotToInputSlot (outputSlot, inputSlot))) {
340- return false ;
379+ success = false ;
341380 }
342- }
381+ return success;
382+ });
343383
344- return true ;
384+ return success ;
345385}
346386
347387bool NodeManager::DisconnectOutputSlotFromInputSlot (const OutputSlotConstPtr& outputSlot, const InputSlotConstPtr& inputSlot)
@@ -358,54 +398,70 @@ bool NodeManager::DisconnectOutputSlotFromInputSlot (const OutputSlotConstPtr& o
358398 return connectionManager.DisconnectOutputSlotFromInputSlot (outputSlot, inputSlot);
359399}
360400
361- bool NodeManager::DisconnectOutputSlotsFromInputSlot (const std::vector<OutputSlotConstPtr> & outputSlots, const InputSlotConstPtr& inputSlot)
401+ bool NodeManager::DisconnectOutputSlotsFromInputSlot (const OutputSlotList & outputSlots, const InputSlotConstPtr& inputSlot)
362402{
363- if (DBGERROR (outputSlots.empty () || inputSlot == nullptr )) {
403+ if (DBGERROR (outputSlots.IsEmpty () || inputSlot == nullptr )) {
364404 return false ;
365405 }
366406
367- if (DBGERROR (HasDuplicates (outputSlots))) {
407+ bool hasDuplicates = HasDuplicates<OutputSlotList, OutputSlotConstPtr> (outputSlots);
408+ if (DBGERROR (hasDuplicates)) {
368409 return false ;
369410 }
370411
371- for (const OutputSlotConstPtr& outputSlot : outputSlots) {
412+ bool canDisconnect = true ;
413+ outputSlots.Enumerate ([&] (const OutputSlotConstPtr& outputSlot) {
372414 if (DBGERROR (!IsOutputSlotConnectedToInputSlot (outputSlot, inputSlot))) {
373- return false ;
415+ canDisconnect = false ;
374416 }
417+ return canDisconnect;
418+ });
419+ if (DBGERROR (!canDisconnect)) {
420+ return false ;
375421 }
376422
377- for (const OutputSlotConstPtr& outputSlot : outputSlots) {
423+ bool success = true ;
424+ outputSlots.Enumerate ([&] (const OutputSlotConstPtr& outputSlot) {
378425 if (DBGERROR (!DisconnectOutputSlotFromInputSlot (outputSlot, inputSlot))) {
379- return false ;
426+ success = false ;
380427 }
381- }
428+ return success;
429+ });
382430
383- return true ;
431+ return success ;
384432}
385433
386- bool NodeManager::DisconnectOutputSlotFromInputSlots (const OutputSlotConstPtr& outputSlot, const std::vector<InputSlotConstPtr> & inputSlots)
434+ bool NodeManager::DisconnectOutputSlotFromInputSlots (const OutputSlotConstPtr& outputSlot, const InputSlotList & inputSlots)
387435{
388- if (DBGERROR (outputSlot == nullptr || inputSlots.empty ())) {
436+ if (DBGERROR (outputSlot == nullptr || inputSlots.IsEmpty ())) {
389437 return false ;
390438 }
391439
392- if (DBGERROR (HasDuplicates (inputSlots))) {
440+ bool hasDuplicates = HasDuplicates<InputSlotList, InputSlotConstPtr> (inputSlots);
441+ if (DBGERROR (hasDuplicates)) {
393442 return false ;
394443 }
395444
396- for (const InputSlotConstPtr& inputSlot : inputSlots) {
445+ bool canDisconnect = true ;
446+ inputSlots.Enumerate ([&] (const InputSlotConstPtr& inputSlot) {
397447 if (DBGERROR (!IsOutputSlotConnectedToInputSlot (outputSlot, inputSlot))) {
398- return false ;
448+ canDisconnect = false ;
399449 }
450+ return canDisconnect;
451+ });
452+ if (DBGERROR (!canDisconnect)) {
453+ return false ;
400454 }
401455
402- for (const InputSlotConstPtr& inputSlot : inputSlots) {
456+ bool success = true ;
457+ inputSlots.Enumerate ([&] (const InputSlotConstPtr& inputSlot) {
403458 if (DBGERROR (!DisconnectOutputSlotFromInputSlot (outputSlot, inputSlot))) {
404- return false ;
459+ success = false ;
405460 }
406- }
461+ return success;
462+ });
407463
408- return true ;
464+ return success ;
409465}
410466
411467bool NodeManager::DisconnectAllInputSlotsFromOutputSlot (const OutputSlotConstPtr& outputSlot)
0 commit comments