@@ -45,23 +45,25 @@ NE::ValueConstPtr BinaryOperationNode::Calculate (NE::EvaluationEnv& env) const
4545 return nullptr ;
4646 }
4747
48- NE::ListValuePtr resultListValue (new NE::ListValue ());
49- std::shared_ptr<ValueCombinationFeature> valueCombination = GetValueCombinationFeature (this );
50- bool isValid = valueCombination->CombineValues ({aValue, bValue}, [&] (const NE::ValueCombination& combination) {
51- double aDouble = NE::NumberValue::ToDouble (combination.GetValue (0 ));
52- double bDouble = NE::NumberValue::ToDouble (combination.GetValue (1 ));
53- double result = DoOperation (aDouble, bDouble);
54- if (std::isnan (result) || std::isinf (result)) {
55- return false ;
48+ if (NE::IsSingleValue (aValue) && NE::IsSingleValue (bValue)) {
49+ NE::ValuePtr result = DoSingleOperation (aValue, bValue);
50+ return result;
51+ } else {
52+ NE::ListValuePtr resultListValue (new NE::ListValue ());
53+ std::shared_ptr<ValueCombinationFeature> valueCombination = GetValueCombinationFeature (this );
54+ bool isValid = valueCombination->CombineValues ({ aValue, bValue }, [&] (const NE::ValueCombination& combination) {
55+ NE::ValuePtr result = DoSingleOperation (combination.GetValue (0 ), combination.GetValue (1 ));
56+ if (result == nullptr ) {
57+ return false ;
58+ }
59+ resultListValue->Push (result);
60+ return true ;
61+ });
62+ if (!isValid) {
63+ return nullptr ;
5664 }
57- resultListValue->Push (NE::ValuePtr (new NE::DoubleValue (result)));
58- return true ;
59- });
60-
61- if (!isValid) {
62- return nullptr ;
65+ return resultListValue;
6366 }
64- return resultListValue;
6567}
6668
6769void BinaryOperationNode::RegisterParameters (NUIE::NodeParameterList& parameterList) const
@@ -90,6 +92,17 @@ NE::Stream::Status BinaryOperationNode::Write (NE::OutputStream& outputStream) c
9092 return outputStream.GetStatus ();
9193}
9294
95+ NE::ValuePtr BinaryOperationNode::DoSingleOperation (const NE::ValueConstPtr& aValue, const NE::ValueConstPtr& bValue) const
96+ {
97+ double aDouble = NE::NumberValue::ToDouble (aValue);
98+ double bDouble = NE::NumberValue::ToDouble (bValue);
99+ double result = DoOperation (aDouble, bDouble);
100+ if (std::isnan (result) || std::isinf (result)) {
101+ return nullptr ;
102+ }
103+ return NE::ValuePtr (new NE::DoubleValue (result));
104+ }
105+
93106AdditionNode::AdditionNode () :
94107 BinaryOperationNode ()
95108{
0 commit comments