Skip to content

Commit 4a02f34

Browse files
committed
DPL: move MessageContext::schedule out of line
1 parent 4a1c8a6 commit 4a02f34

2 files changed

Lines changed: 34 additions & 32 deletions

File tree

Framework/Core/include/Framework/MessageContext.h

Lines changed: 1 addition & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -444,38 +444,7 @@ class MessageContext
444444
/// Schedule a context object for sending.
445445
/// The object is considered complete at this point and is sent directly through the dispatcher callback
446446
/// of the context if initialized.
447-
void schedule(Messages::value_type&& message)
448-
{
449-
auto const* header = message->header();
450-
if (header == nullptr) {
451-
throw std::logic_error("No valid header message found");
452-
}
453-
mScheduledMessages.emplace_back(std::move(message));
454-
if (mDispatchControl.dispatch != nullptr) {
455-
// send all scheduled messages if there is no trigger callback or its result is true
456-
if (mDispatchControl.trigger == nullptr || mDispatchControl.trigger(*header)) {
457-
std::vector<fair::mq::Parts> outputsPerChannel;
458-
outputsPerChannel.resize(mProxy.getNumOutputChannels());
459-
for (auto& message : mScheduledMessages) {
460-
fair::mq::Parts parts = message->finalize();
461-
assert(message->empty());
462-
assert(parts.Size() == 2);
463-
for (auto& part : parts) {
464-
outputsPerChannel[mProxy.getOutputChannelIndex(message->route()).value].AddPart(std::move(part));
465-
}
466-
}
467-
for (int ci = 0; ci < mProxy.getNumOutputChannels(); ++ci) {
468-
auto& parts = outputsPerChannel[ci];
469-
if (parts.Size() == 0) {
470-
continue;
471-
}
472-
mDispatchControl.dispatch(std::move(parts), ChannelIndex{ci}, DefaultChannelIndex);
473-
}
474-
mDidDispatch = mScheduledMessages.empty() == false;
475-
mScheduledMessages.clear();
476-
}
477-
}
478-
}
447+
void schedule(Messages::value_type&& message);
479448

480449
Messages getMessagesForSending()
481450
{

Framework/Core/src/MessageContext.cxx

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -123,4 +123,37 @@ void MessageContext::pruneFromCache(int64_t id)
123123
mMessageCache.erase(id);
124124
}
125125

126+
void MessageContext::schedule(Messages::value_type&& message)
127+
{
128+
auto const* header = message->header();
129+
if (header == nullptr) {
130+
throw std::logic_error("No valid header message found");
131+
}
132+
mScheduledMessages.emplace_back(std::move(message));
133+
if (mDispatchControl.dispatch != nullptr) {
134+
// send all scheduled messages if there is no trigger callback or its result is true
135+
if (mDispatchControl.trigger == nullptr || mDispatchControl.trigger(*header)) {
136+
std::vector<fair::mq::Parts> outputsPerChannel;
137+
outputsPerChannel.resize(mProxy.getNumOutputChannels());
138+
for (auto& message : mScheduledMessages) {
139+
fair::mq::Parts parts = message->finalize();
140+
assert(message->empty());
141+
assert(parts.Size() == 2);
142+
for (auto& part : parts) {
143+
outputsPerChannel[mProxy.getOutputChannelIndex(message->route()).value].AddPart(std::move(part));
144+
}
145+
}
146+
for (int ci = 0; ci < mProxy.getNumOutputChannels(); ++ci) {
147+
auto& parts = outputsPerChannel[ci];
148+
if (parts.Size() == 0) {
149+
continue;
150+
}
151+
mDispatchControl.dispatch(std::move(parts), ChannelIndex{ci}, DefaultChannelIndex);
152+
}
153+
mDidDispatch = mScheduledMessages.empty() == false;
154+
mScheduledMessages.clear();
155+
}
156+
}
157+
}
158+
126159
} // namespace o2::framework

0 commit comments

Comments
 (0)