@@ -275,31 +275,7 @@ bool Node::RegisterOutputSlot (const OutputSlotPtr& newOutputSlot)
275
275
return true ;
276
276
}
277
277
278
- ValueConstPtr Node::EvaluateSingleInputSlot (const SlotId& slotId, EvaluationEnv& env) const
279
- {
280
- if (DBGERROR (!HasInputSlot (slotId))) {
281
- return nullptr ;
282
- }
283
-
284
- InputSlotConstPtr inputSlot = GetInputSlot (slotId);
285
- if (DBGERROR (inputSlot == nullptr )) {
286
- return nullptr ;
287
- }
288
-
289
- OutputSlotConnectionMode outputSlotConnectionMode = inputSlot->GetOutputSlotConnectionMode ();
290
- if (DBGERROR (outputSlotConnectionMode == OutputSlotConnectionMode::Multiple)) {
291
- return nullptr ;
292
- }
293
-
294
- ListValueConstPtr result = EvaluateInputSlot (inputSlot, env);
295
- if (DBGERROR (result->GetSize () != 1 )) {
296
- return nullptr ;
297
- }
298
-
299
- return result->GetValue (0 );
300
- }
301
-
302
- ListValueConstPtr Node::EvaluateInputSlot (const SlotId& slotId, EvaluationEnv& env) const
278
+ ValueConstPtr Node::EvaluateInputSlot (const SlotId& slotId, EvaluationEnv& env) const
303
279
{
304
280
if (DBGERROR (!HasInputSlot (slotId))) {
305
281
return nullptr ;
@@ -323,22 +299,35 @@ void Node::ProcessValue (const ValueConstPtr&, EvaluationEnv&) const
323
299
324
300
}
325
301
326
- ListValueConstPtr Node::EvaluateInputSlot (const InputSlotConstPtr& inputSlot, EvaluationEnv& env) const
302
+ ValueConstPtr Node::EvaluateInputSlot (const InputSlotConstPtr& inputSlot, EvaluationEnv& env) const
327
303
{
328
304
if (DBGERROR (nodeEvaluator == nullptr )) {
329
305
return nullptr ;
330
306
}
331
307
332
- ListValuePtr result (new ListValue ());
333
308
if (!nodeEvaluator->HasConnectedOutputSlots (inputSlot)) {
334
- result->Push (inputSlot->GetDefaultValue ());
335
- return result;
309
+ return inputSlot->GetDefaultValue ();
336
310
}
337
311
312
+ std::vector<OutputSlotConstPtr> connectedOutputSlots;
338
313
nodeEvaluator->EnumerateConnectedOutputSlots (inputSlot, [&] (const OutputSlotConstPtr& outputSlot) {
339
- result-> Push (outputSlot-> Evaluate (env) );
314
+ connectedOutputSlots. push_back (outputSlot);
340
315
});
341
- return result;
316
+
317
+ OutputSlotConnectionMode outputSlotConnectionMode = inputSlot->GetOutputSlotConnectionMode ();
318
+ if (outputSlotConnectionMode == OutputSlotConnectionMode::Single) {
319
+ DBGASSERT (connectedOutputSlots.size () == 1 );
320
+ return connectedOutputSlots[0 ]->Evaluate (env);
321
+ } else if (inputSlot->GetOutputSlotConnectionMode () == OutputSlotConnectionMode::Multiple) {
322
+ ListValuePtr result (new ListValue ());
323
+ for (const OutputSlotConstPtr& outputSlot : connectedOutputSlots) {
324
+ result->Push (outputSlot->Evaluate (env));
325
+ }
326
+ return result;
327
+ }
328
+
329
+ DBGBREAK ();
330
+ return nullptr ;
342
331
}
343
332
344
333
NodePtr Node::Clone (const NodeConstPtr& node)
0 commit comments