|
11 | 11 |
|
12 | 12 | #include "Framework/AnalysisSupportHelpers.h" |
13 | 13 | #include "Framework/DataOutputDirector.h" |
| 14 | +#include "Framework/DataSpecViews.h" |
14 | 15 | #include "Framework/OutputObjHeader.h" |
15 | 16 | #include "Framework/ControlService.h" |
16 | 17 | #include "Framework/EndOfStreamContext.h" |
@@ -129,30 +130,12 @@ void AnalysisSupportHelpers::addMissingOutputsToReader(std::vector<OutputSpec> c |
129 | 130 | std::vector<InputSpec> const& requestedInputs, |
130 | 131 | DataProcessorSpec& publisher) |
131 | 132 | { |
132 | | - auto matchingOutputFor = [](InputSpec const& requested) { |
133 | | - return [&requested](OutputSpec const& provided) { |
134 | | - return DataSpecUtils::match(requested, provided); |
135 | | - }; |
136 | | - }; |
137 | | - for (InputSpec const& requested : requestedInputs) { |
138 | | - auto provided = std::find_if(providedOutputs.begin(), |
139 | | - providedOutputs.end(), |
140 | | - matchingOutputFor(requested)); |
141 | | - |
142 | | - if (provided != providedOutputs.end()) { |
143 | | - continue; |
144 | | - } |
145 | | - |
146 | | - auto inList = std::find_if(publisher.outputs.begin(), |
147 | | - publisher.outputs.end(), |
148 | | - matchingOutputFor(requested)); |
149 | | - if (inList != publisher.outputs.end()) { |
150 | | - continue; |
151 | | - } |
152 | | - |
153 | | - auto concrete = DataSpecUtils::asConcreteDataMatcher(requested); |
154 | | - publisher.outputs.emplace_back(concrete.origin, concrete.description, concrete.subSpec, requested.lifetime, requested.metadata); |
155 | | - } |
| 133 | + requestedInputs | |
| 134 | + views::filter_not_matching(providedOutputs) | // filter the inputs that are already provided |
| 135 | + std::views::transform([](auto const& req){ // create outputspecs for unmatched inputs |
| 136 | + return DataSpecUtils::asOutputSpec(req); |
| 137 | + }) | |
| 138 | + sinks::update_output_list{publisher.outputs}; // append them to the publisher outputs |
156 | 139 | } |
157 | 140 |
|
158 | 141 | void AnalysisSupportHelpers::addMissingOutputsToSpawner(std::vector<OutputSpec> const& providedSpecials, |
|
0 commit comments