Skip to content

Commit b11615e

Browse files
committed
Interruptible list value enumeration.
1 parent 195cf81 commit b11615e

9 files changed

Lines changed: 29 additions & 16 deletions

File tree

Sources/BuiltInNodes/BI_BinaryOperationNodes.cpp

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -46,8 +46,7 @@ NE::ValueConstPtr BinaryOperationNode::Calculate (NE::EvaluationEnv& env) const
4646
}
4747

4848
if (NE::IsSingleValue (aValue) && NE::IsSingleValue (bValue)) {
49-
NE::ValuePtr result = DoSingleOperation (aValue, bValue);
50-
return result;
49+
return DoSingleOperation (aValue, bValue);
5150
} else {
5251
NE::ListValuePtr resultListValue (new NE::ListValue ());
5352
std::shared_ptr<ValueCombinationFeature> valueCombination = GetValueCombinationFeature (this);

Sources/BuiltInNodes/BI_InputUINodes.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -787,6 +787,7 @@ NE::ValueConstPtr ListBuilderNode::Calculate (NE::EvaluationEnv& env) const
787787
NE::ListValuePtr list (new NE::ListValue ());
788788
NE::FlatEnumerate (in, [&] (const NE::ValueConstPtr& innerVal) {
789789
list->Push (innerVal);
790+
return true;
790791
});
791792
return list;
792793
}

Sources/BuiltInNodes/BI_ViewerUINodes.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -103,6 +103,7 @@ void MultiLineViewerNode::Layout::GetTextInfo (const BasicUINode& uiNode,
103103
} else {
104104
texts.push_back (NE::LocalizeString (L"<empty>"));
105105
}
106+
return true;
106107
});
107108
}
108109
}

Sources/NodeEngine/NE_Value.cpp

Lines changed: 16 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -155,11 +155,14 @@ const NE::ValueConstPtr& ListValue::GetValue (size_t index) const
155155
return values[index];
156156
}
157157

158-
void ListValue::Enumerate (const std::function<void (const ValueConstPtr&)>& processor) const
158+
bool ListValue::Enumerate (const std::function<bool (const ValueConstPtr&)>& processor) const
159159
{
160160
for (const ValueConstPtr& value : values) {
161-
processor (value);
161+
if (!processor (value)) {
162+
return false;
163+
}
162164
}
165+
return true;
163166
}
164167

165168
void ListValue::Push (const ValueConstPtr& value)
@@ -183,9 +186,9 @@ const NE::ValueConstPtr& ValueToListValueAdapter::GetValue (size_t) const
183186
return val;
184187
}
185188

186-
void ValueToListValueAdapter::Enumerate (const std::function<void (const ValueConstPtr&)>& processor) const
189+
bool ValueToListValueAdapter::Enumerate (const std::function<bool (const ValueConstPtr&)>& processor) const
187190
{
188-
processor (val);
191+
return processor (val);
189192
}
190193

191194
bool IsSingleValue (const ValueConstPtr& value)
@@ -227,19 +230,21 @@ IListValueConstPtr CreateListValue (const ValueConstPtr& value)
227230
return nullptr;
228231
}
229232

230-
void FlatEnumerate (const ValueConstPtr& value, const std::function<void (const ValueConstPtr&)>& processor)
233+
bool FlatEnumerate (const ValueConstPtr& value, const std::function<bool (const ValueConstPtr&)>& processor)
231234
{
232235
if (value == nullptr) {
233-
processor (value);
234-
return;
236+
return processor (value);
235237
}
236238
IListValueConstPtr listValue = CreateListValue (value);
237-
listValue->Enumerate ([&] (const ValueConstPtr& innerValue) {
239+
return listValue->Enumerate ([&] (const ValueConstPtr& innerValue) {
238240
if (Value::IsType<SingleValue> (innerValue)) {
239-
processor (innerValue);
241+
if (!processor (innerValue)) {
242+
return false;
243+
}
240244
} else {
241-
FlatEnumerate (innerValue, processor);
245+
return FlatEnumerate (innerValue, processor);
242246
}
247+
return true;
243248
});
244249
}
245250

@@ -248,6 +253,7 @@ ValueConstPtr FlattenValue (const ValueConstPtr& value)
248253
ListValuePtr listValue (new ListValue ());
249254
FlatEnumerate (value, [&] (const ValueConstPtr& value) {
250255
listValue->Push (value);
256+
return true;
251257
});
252258
return listValue;
253259
}

Sources/NodeEngine/NE_Value.hpp

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -127,7 +127,7 @@ class IListValue
127127

128128
virtual size_t GetSize () const = 0;
129129
virtual const ValueConstPtr& GetValue (size_t index) const = 0;
130-
virtual void Enumerate (const std::function<void (const ValueConstPtr&)>& processor) const = 0;
130+
virtual bool Enumerate (const std::function<bool (const ValueConstPtr&)>& processor) const = 0;
131131
};
132132

133133
class ListValue : public Value,
@@ -147,7 +147,7 @@ class ListValue : public Value,
147147

148148
virtual size_t GetSize () const override;
149149
virtual const ValueConstPtr& GetValue (size_t index) const override;
150-
virtual void Enumerate (const std::function<void (const ValueConstPtr&)>& processor) const override;
150+
virtual bool Enumerate (const std::function<bool (const ValueConstPtr&)>& processor) const override;
151151

152152
void Push (const ValueConstPtr& value);
153153

@@ -162,7 +162,7 @@ class ValueToListValueAdapter : public IListValue
162162

163163
virtual size_t GetSize () const override;
164164
virtual const ValueConstPtr& GetValue (size_t index) const override;
165-
virtual void Enumerate (const std::function<void (const ValueConstPtr&)>& processor) const override;
165+
virtual bool Enumerate (const std::function<bool (const ValueConstPtr&)>& processor) const override;
166166

167167
private:
168168
const ValueConstPtr& val;
@@ -199,6 +199,7 @@ bool IsComplexType (const ValueConstPtr& val)
199199
if (!IsComplexType<Type> (innerVal)) {
200200
isType = false;
201201
}
202+
return isType;
202203
});
203204
return isType;
204205
}
@@ -211,7 +212,7 @@ bool IsListValue (const ValueConstPtr& value);
211212
ValueConstPtr CreateSingleValue (const ValueConstPtr& value);
212213
IListValueConstPtr CreateListValue (const ValueConstPtr& value);
213214

214-
void FlatEnumerate (const ValueConstPtr& value, const std::function<void (const ValueConstPtr&)>& processor);
215+
bool FlatEnumerate (const ValueConstPtr& value, const std::function<bool (const ValueConstPtr&)>& processor);
215216
ValueConstPtr FlattenValue (const ValueConstPtr& value);
216217

217218
}

Sources/NodeEngineTest/BinaryOperationNodesTest.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,9 +40,11 @@ TEST (TestAdditionNodeWithList)
4040

4141
ValueConstPtr val = op->Evaluate (EmptyEvaluationEnv);
4242
ASSERT (Value::IsType<ListValue> (val));
43+
ASSERT (IsComplexType<NumberValue> (val));
4344
std::vector<double> values;
4445
FlatEnumerate (val, [&] (const ValueConstPtr& v) {
4546
values.push_back (NumberValue::ToDouble (v));
47+
return true;
4648
});
4749
ASSERT (values == std::vector<double> ({ 0.0, 2.0, 4.0, 6.0, 8.0, 10.0, 12.0, 14.0, 16.0, 18.0 }));
4850
}

Sources/NodeEngineTest/ListValueNodeTest.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,7 @@ class ListSummer : public SerializableTestNode
7777
if (IsComplexType<NumberValue> (val)) {
7878
NE::FlatEnumerate (val, [&] (const NE::ValueConstPtr& value) {
7979
result += IntValue::Get (value);
80+
return true;
8081
});
8182
}
8283
return ValueConstPtr (new IntValue (result));

Sources/NodeEngineTest/MultiInputSlotTest.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,7 @@ class FlattenerNode : public SerializableTestNode
8181
ListValuePtr result (new ListValue ());
8282
FlatEnumerate (val, [&] (const ValueConstPtr& flatVal) {
8383
result->Push (flatVal->Clone ());
84+
return true;
8485
});
8586
return result;
8687
}

Sources/NodeEngineTest/NodeConnectionTest.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -186,6 +186,7 @@ class MultiAdditionNode : public SerializableTestNode
186186
int sum = 0;
187187
FlatEnumerate (result, [&] (const ValueConstPtr& val) {
188188
sum += IntValue::Get (val);
189+
return true;
189190
});
190191
return ValuePtr (new IntValue (sum));
191192
}

0 commit comments

Comments
 (0)