Skip to content

Commit e97ad87

Browse files
committed
update addMissingOutputsToSpawner with ranges
1 parent 3aec9e4 commit e97ad87

File tree

1 file changed

+19
-18
lines changed

1 file changed

+19
-18
lines changed

Framework/Core/src/AnalysisSupportHelpers.cxx

Lines changed: 19 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -143,25 +143,26 @@ void AnalysisSupportHelpers::addMissingOutputsToSpawner(std::vector<OutputSpec>
143143
std::vector<InputSpec>& requestedAODs,
144144
DataProcessorSpec& publisher)
145145
{
146-
for (auto& input : requestedSpecials) {
147-
if (std::any_of(providedSpecials.begin(), providedSpecials.end(), [&input](auto const& x) {
148-
return DataSpecUtils::match(input, x);
149-
})) {
150-
continue;
151-
}
152-
auto concrete = DataSpecUtils::asConcreteDataMatcher(input);
153-
publisher.outputs.emplace_back(concrete.origin, concrete.description, concrete.subSpec);
154-
for (auto& i : input.metadata) {
155-
if ((i.type == VariantType::String) && (i.name.find("input:") != std::string::npos)) {
156-
auto spec = DataSpecUtils::fromMetadataString(i.defaultValue.get<std::string>());
157-
auto j = std::find(publisher.inputs.begin(), publisher.inputs.end(), spec);
158-
if (j == publisher.inputs.end()) {
159-
publisher.inputs.push_back(spec);
160-
}
161-
DataSpecUtils::updateInputList(requestedAODs, std::move(spec));
162-
}
163-
}
146+
requestedSpecials |
147+
views::filter_not_matching(providedSpecials) | // filter the inputs that are already provided
148+
std::views::transform([](auto const& req){ // create outputspecs for unmatched inputs
149+
return DataSpecUtils::asOutputSpec(req);
150+
}) |
151+
sinks::append_to(publisher.outputs); // append them to the publisher outputs
152+
153+
std::vector<InputSpec> additionalInputs;
154+
for (auto& input : requestedSpecials | views::filter_not_matching(providedSpecials)) {
155+
input.metadata |
156+
std::views::filter([](auto const& param){ // filter config params that are strings starting with "input:"
157+
return (param.type == VariantType::String) && (param.name.find("input:") != std::string::npos);
158+
}) |
159+
std::views::transform([](auto const& param){ // parse them into InputSpecs
160+
return DataSpecUtils::fromMetadataString(param.defaultValue.template get<std::string>());
161+
}) |
162+
sinks::update_input_list{additionalInputs}; // store into a temporary
164163
}
164+
additionalInputs | sinks::update_input_list{requestedAODs}; // update requestedAODs
165+
additionalInputs | sinks::update_input_list{publisher.inputs}; // update publisher inputs
165166
}
166167

167168
void AnalysisSupportHelpers::addMissingOutputsToBuilder(std::vector<InputSpec> const& requestedSpecials,

0 commit comments

Comments
 (0)