Skip to content

Commit 3e37f60

Browse files
committed
DPL: reduce bloat in runDataProcessing.h
1 parent a9ccd58 commit 3e37f60

File tree

1 file changed

+27
-43
lines changed

1 file changed

+27
-43
lines changed

Framework/Core/include/Framework/runDataProcessing.h

Lines changed: 27 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
#ifndef FRAMEWORK_RUN_DATA_PROCESSING_H
1212
#define FRAMEWORK_RUN_DATA_PROCESSING_H
1313

14+
#include <fmt/format.h>
1415
#include "Framework/ChannelConfigurationPolicy.h"
1516
#include "Framework/CallbacksPolicy.h"
1617
#include "Framework/CompletionPolicy.h"
@@ -30,6 +31,7 @@
3031
#include "Framework/CheckTypes.h"
3132
#include "Framework/StructToTuple.h"
3233
#include "Framework/ConfigParamDiscovery.h"
34+
#include "ResourcePolicy.h"
3335
#include "ServiceRegistryRef.h"
3436
#include <vector>
3537

@@ -66,9 +68,7 @@ o2::framework::WorkflowSpec defineDataProcessing(o2::framework::ConfigContext co
6668

6769
// By default we leave the channel policies unchanged. Notice that the default still include
6870
// a "match all" policy which uses pub / sub
69-
// FIXME: add a debug statement saying that the default policy was used?
7071

71-
void defaultConfiguration(std::vector<o2::framework::ChannelConfigurationPolicy>& channelPolicies) {}
7272
void defaultConfiguration(std::vector<o2::framework::ConfigParamSpec>& globalWorkflowOptions)
7373
{
7474
o2::framework::call_if_defined<struct WorkflowOptions>([&](auto* ptr) {
@@ -80,19 +80,13 @@ void defaultConfiguration(std::vector<o2::framework::ConfigParamSpec>& globalWor
8080
});
8181
}
8282

83-
void defaultConfiguration(std::vector<o2::framework::CompletionPolicy>& completionPolicies) {}
84-
void defaultConfiguration(std::vector<o2::framework::DispatchPolicy>& dispatchPolicies) {}
85-
void defaultConfiguration(std::vector<o2::framework::ResourcePolicy>& resourcePolicies) {}
8683
void defaultConfiguration(std::vector<o2::framework::ServiceSpec>& services)
8784
{
8885
if (services.empty()) {
8986
services = o2::framework::CommonServices::defaultServices();
9087
}
9188
}
9289

93-
void defaultConfiguration(std::vector<o2::framework::CallbacksPolicy>& callbacksPolicies) {}
94-
void defaultConfiguration(std::vector<o2::framework::SendingPolicy>& callbacksPolicies) {}
95-
9690
/// Workflow options which are required by DPL in order to work.
9791
std::vector<o2::framework::ConfigParamSpec> requiredWorkflowOptions();
9892

@@ -101,19 +95,26 @@ void defaultConfiguration(o2::framework::OnWorkflowTerminationHook& hook)
10195
hook = [](const char*) {};
10296
}
10397

98+
template <typename T>
99+
concept WithUserOverride = requires(T& something) { customize(something); };
100+
101+
template <typename T>
102+
concept WithNonTrivialDefault = !WithUserOverride<T> && requires(T& something) { defaultConfiguration(something); };
103+
104104
struct UserCustomizationsHelper {
105-
template <typename T>
106-
static auto userDefinedCustomization(T& something, int preferUser) -> decltype(customize(something), void())
105+
static auto userDefinedCustomization(WithUserOverride auto& something) -> void
107106
{
108107
customize(something);
109108
}
110109

111-
template <typename T>
112-
static auto userDefinedCustomization(T& something, long preferUser)
113-
-> decltype(defaultConfiguration(something), void())
110+
static auto userDefinedCustomization(WithNonTrivialDefault auto& something) -> void
114111
{
115112
defaultConfiguration(something);
116113
}
114+
115+
static auto userDefinedCustomization(auto&) -> void
116+
{
117+
}
117118
};
118119

119120
namespace o2::framework
@@ -144,12 +145,14 @@ int doMain(int argc, char** argv, o2::framework::WorkflowSpec const& specs,
144145
void doDefaultWorkflowTerminationHook();
145146

146147
template <typename T>
148+
requires requires(T& policy) { { T::createDefaultPolicies() } -> std::same_as<std::vector<T>>; }
147149
std::vector<T> injectCustomizations()
148150
{
149151
std::vector<T> policies;
150-
UserCustomizationsHelper::userDefinedCustomization(policies, 0);
152+
UserCustomizationsHelper::userDefinedCustomization(policies);
151153
auto defaultPolicies = T::createDefaultPolicies();
152-
policies.insert(std::end(policies), std::begin(policies), std::end(policies));
154+
policies.insert(std::end(policies), std::begin(defaultPolicies), std::end(defaultPolicies));
155+
return policies;
153156
}
154157

155158
int mainNoCatch(int argc, char** argv)
@@ -158,34 +161,15 @@ int mainNoCatch(int argc, char** argv)
158161
using namespace boost::program_options;
159162

160163
std::vector<o2::framework::ConfigParamSpec> workflowOptions;
161-
UserCustomizationsHelper::userDefinedCustomization(workflowOptions, 0);
164+
UserCustomizationsHelper::userDefinedCustomization(workflowOptions);
162165
auto requiredWorkflowOptions = WorkflowCustomizationHelpers::requiredWorkflowOptions();
163166
workflowOptions.insert(std::end(workflowOptions), std::begin(requiredWorkflowOptions), std::end(requiredWorkflowOptions));
164167

165-
std::vector<CompletionPolicy> completionPolicies;
166-
UserCustomizationsHelper::userDefinedCustomization(completionPolicies, 0);
167-
auto defaultCompletionPolicies = CompletionPolicy::createDefaultPolicies();
168-
completionPolicies.insert(std::end(completionPolicies), std::begin(defaultCompletionPolicies), std::end(defaultCompletionPolicies));
169-
170-
std::vector<DispatchPolicy> dispatchPolicies;
171-
UserCustomizationsHelper::userDefinedCustomization(dispatchPolicies, 0);
172-
auto defaultDispatchPolicies = DispatchPolicy::createDefaultPolicies();
173-
dispatchPolicies.insert(std::end(dispatchPolicies), std::begin(defaultDispatchPolicies), std::end(defaultDispatchPolicies));
174-
175-
std::vector<ResourcePolicy> resourcePolicies;
176-
UserCustomizationsHelper::userDefinedCustomization(resourcePolicies, 0);
177-
auto defaultResourcePolicies = ResourcePolicy::createDefaultPolicies();
178-
resourcePolicies.insert(std::end(resourcePolicies), std::begin(defaultResourcePolicies), std::end(defaultResourcePolicies));
179-
180-
std::vector<CallbacksPolicy> callbacksPolicies;
181-
UserCustomizationsHelper::userDefinedCustomization(callbacksPolicies, 0);
182-
auto defaultCallbacksPolicies = CallbacksPolicy::createDefaultPolicies();
183-
callbacksPolicies.insert(std::end(callbacksPolicies), std::begin(defaultCallbacksPolicies), std::end(defaultCallbacksPolicies));
184-
185-
std::vector<SendingPolicy> sendingPolicies;
186-
UserCustomizationsHelper::userDefinedCustomization(sendingPolicies, 0);
187-
auto defaultSendingPolicies = SendingPolicy::createDefaultPolicies();
188-
sendingPolicies.insert(std::end(sendingPolicies), std::begin(defaultSendingPolicies), std::end(defaultSendingPolicies));
168+
std::vector<CompletionPolicy> completionPolicies = injectCustomizations<CompletionPolicy>();
169+
std::vector<DispatchPolicy> dispatchPolicies = injectCustomizations<DispatchPolicy>();
170+
std::vector<ResourcePolicy> resourcePolicies = injectCustomizations<ResourcePolicy>();
171+
std::vector<CallbacksPolicy> callbacksPolicies = injectCustomizations<CallbacksPolicy>();
172+
std::vector<SendingPolicy> sendingPolicies = injectCustomizations<SendingPolicy>();
189173

190174
std::vector<std::unique_ptr<ParamRetriever>> retrievers;
191175
std::unique_ptr<ParamRetriever> retriever{new BoostOptionsRetriever(true, argc, argv)};
@@ -206,10 +190,10 @@ int mainNoCatch(int argc, char** argv)
206190
overridePipeline(configContext, specs);
207191
overrideLabels(configContext, specs);
208192
for (auto& spec : specs) {
209-
UserCustomizationsHelper::userDefinedCustomization(spec.requiredServices, 0);
193+
UserCustomizationsHelper::userDefinedCustomization(spec.requiredServices);
210194
}
211195
std::vector<ChannelConfigurationPolicy> channelPolicies;
212-
UserCustomizationsHelper::userDefinedCustomization(channelPolicies, 0);
196+
UserCustomizationsHelper::userDefinedCustomization(channelPolicies);
213197
auto defaultChannelPolicies = ChannelConfigurationPolicy::createDefaultPolicies(configContext);
214198
channelPolicies.insert(std::end(channelPolicies), std::begin(defaultChannelPolicies), std::end(defaultChannelPolicies));
215199
return doMain(argc, argv, specs,
@@ -229,7 +213,7 @@ int main(int argc, char** argv)
229213

230214
char* idstring = getIdString(argc, argv);
231215
o2::framework::OnWorkflowTerminationHook onWorkflowTerminationHook;
232-
UserCustomizationsHelper::userDefinedCustomization(onWorkflowTerminationHook, 0);
216+
UserCustomizationsHelper::userDefinedCustomization(onWorkflowTerminationHook);
233217
onWorkflowTerminationHook(idstring);
234218
doDefaultWorkflowTerminationHook();
235219

0 commit comments

Comments
 (0)