Skip to content

Commit 8885db5

Browse files
committed
Use interface instead of vectors in multiple connection handling functions.
1 parent baa9bc9 commit 8885db5

File tree

3 files changed

+234
-92
lines changed

3 files changed

+234
-92
lines changed

Sources/NodeEngine/NE_NodeManager.cpp

Lines changed: 106 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -11,17 +11,19 @@ namespace NE
1111

1212
SERIALIZATION_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

2729
class 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+
109141
NodeManager::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

307343
bool 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

347387
bool 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

411467
bool NodeManager::DisconnectAllInputSlotsFromOutputSlot (const OutputSlotConstPtr& outputSlot)

Sources/NodeEngine/NE_NodeManager.hpp

Lines changed: 28 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,28 @@
1818
namespace NE
1919
{
2020

21+
class OutputSlotList
22+
{
23+
public:
24+
OutputSlotList ();
25+
virtual ~OutputSlotList ();
26+
27+
bool IsEmpty () const;
28+
virtual size_t GetSize () const = 0;
29+
virtual void Enumerate (const std::function<bool (const OutputSlotConstPtr&)>& processor) const = 0;
30+
};
31+
32+
class InputSlotList
33+
{
34+
public:
35+
InputSlotList ();
36+
virtual ~InputSlotList ();
37+
38+
bool IsEmpty () const;
39+
virtual size_t GetSize () const = 0;
40+
virtual void Enumerate (const std::function<bool (const InputSlotConstPtr&)>& processor) const = 0;
41+
};
42+
2143
class NodeManager
2244
{
2345
SERIALIZABLE;
@@ -57,15 +79,15 @@ class NodeManager
5779
bool IsOutputSlotConnectedToInputSlot (const OutputSlotConstPtr& outputSlot, const InputSlotConstPtr& inputSlot) const;
5880
bool CanConnectOutputSlotToInputSlot (const InputSlotConstPtr& inputSlot) const;
5981
bool CanConnectOutputSlotToInputSlot (const OutputSlotConstPtr& outputSlot, const InputSlotConstPtr& inputSlot) const;
60-
bool CanConnectOutputSlotsToInputSlot (const std::vector<OutputSlotConstPtr>& outputSlots, const InputSlotConstPtr& inputSlot) const;
61-
bool CanConnectOutputSlotToInputSlots (const OutputSlotConstPtr& outputSlot, const std::vector<InputSlotConstPtr>& inputSlots) const;
82+
bool CanConnectOutputSlotsToInputSlot (const OutputSlotList& outputSlots, const InputSlotConstPtr& inputSlot) const;
83+
bool CanConnectOutputSlotToInputSlots (const OutputSlotConstPtr& outputSlot, const InputSlotList& inputSlots) const;
6284

6385
bool ConnectOutputSlotToInputSlot (const OutputSlotConstPtr& outputSlot, const InputSlotConstPtr& inputSlot);
64-
bool ConnectOutputSlotsToInputSlot (const std::vector<OutputSlotConstPtr>& outputSlots, const InputSlotConstPtr& inputSlot);
65-
bool ConnectOutputSlotToInputSlots (const OutputSlotConstPtr& outputSlot, const std::vector<InputSlotConstPtr>& inputSlots);
86+
bool ConnectOutputSlotsToInputSlot (const OutputSlotList& outputSlots, const InputSlotConstPtr& inputSlot);
87+
bool ConnectOutputSlotToInputSlots (const OutputSlotConstPtr& outputSlot, const InputSlotList& inputSlots);
6688
bool DisconnectOutputSlotFromInputSlot (const OutputSlotConstPtr& outputSlot, const InputSlotConstPtr& inputSlot);
67-
bool DisconnectOutputSlotsFromInputSlot (const std::vector<OutputSlotConstPtr>& outputSlots, const InputSlotConstPtr& inputSlot);
68-
bool DisconnectOutputSlotFromInputSlots (const OutputSlotConstPtr& outputSlot, const std::vector<InputSlotConstPtr>& inputSlots);
89+
bool DisconnectOutputSlotsFromInputSlot (const OutputSlotList& outputSlots, const InputSlotConstPtr& inputSlot);
90+
bool DisconnectOutputSlotFromInputSlots (const OutputSlotConstPtr& outputSlot, const InputSlotList& inputSlots);
6991
bool DisconnectAllInputSlotsFromOutputSlot (const OutputSlotConstPtr& outputSlot);
7092
bool DisconnectAllOutputSlotsFromInputSlot (const InputSlotConstPtr& inputSlot);
7193

0 commit comments

Comments
 (0)