@@ -275,31 +275,7 @@ bool Node::RegisterOutputSlot (const OutputSlotPtr& newOutputSlot)
275275 return true ;
276276}
277277
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
303279{
304280 if (DBGERROR (!HasInputSlot (slotId))) {
305281 return nullptr ;
@@ -323,22 +299,35 @@ void Node::ProcessValue (const ValueConstPtr&, EvaluationEnv&) const
323299
324300}
325301
326- ListValueConstPtr Node::EvaluateInputSlot (const InputSlotConstPtr& inputSlot, EvaluationEnv& env) const
302+ ValueConstPtr Node::EvaluateInputSlot (const InputSlotConstPtr& inputSlot, EvaluationEnv& env) const
327303{
328304 if (DBGERROR (nodeEvaluator == nullptr )) {
329305 return nullptr ;
330306 }
331307
332- ListValuePtr result (new ListValue ());
333308 if (!nodeEvaluator->HasConnectedOutputSlots (inputSlot)) {
334- result->Push (inputSlot->GetDefaultValue ());
335- return result;
309+ return inputSlot->GetDefaultValue ();
336310 }
337311
312+ std::vector<OutputSlotConstPtr> connectedOutputSlots;
338313 nodeEvaluator->EnumerateConnectedOutputSlots (inputSlot, [&] (const OutputSlotConstPtr& outputSlot) {
339- result-> Push (outputSlot-> Evaluate (env) );
314+ connectedOutputSlots. push_back (outputSlot);
340315 });
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 ;
342331}
343332
344333NodePtr Node::Clone (const NodeConstPtr& node)
0 commit comments