9 #ifndef FAIRMQMULTIPLIER_H_
10 #define FAIRMQMULTIPLIER_H_
12 #include "FairMQDevice.h"
31 std::string fInChannelName;
32 std::vector<std::string> fOutChannelNames;
39 fNumOutputs =
fChannels.at(fOutChannelNames.at(0)).size();
42 OnData(fInChannelName, &FairMQMultiplier::HandleMultipartData);
44 OnData(fInChannelName, &FairMQMultiplier::HandleSingleData);
49 bool HandleSingleData(std::unique_ptr<FairMQMessage>& payload,
int)
51 for (
unsigned int i = 0; i < fOutChannelNames.size() - 1; ++i) {
52 for (
unsigned int j = 0; j <
fChannels.at(fOutChannelNames.at(i)).size(); ++j) {
54 msgCopy->Copy(*payload);
56 Send(msgCopy, fOutChannelNames.at(i), j);
60 unsigned int lastChannelSize =
fChannels.at(fOutChannelNames.back()).size();
62 for (
unsigned int i = 0; i < lastChannelSize - 1; ++i) {
64 msgCopy->Copy(*payload);
66 Send(msgCopy, fOutChannelNames.back(), i);
69 Send(payload, fOutChannelNames.back(), lastChannelSize - 1);
76 for (
unsigned int i = 0; i < fOutChannelNames.size() - 1; ++i) {
77 for (
unsigned int j = 0; j <
fChannels.at(fOutChannelNames.at(i)).size(); ++j) {
80 for (
int k = 0; k < payload.
Size(); ++k) {
82 msgCopy->Copy(payload.AtRef(k));
83 parts.
AddPart(std::move(msgCopy));
86 Send(parts, fOutChannelNames.at(i), j);
90 unsigned int lastChannelSize =
fChannels.at(fOutChannelNames.back()).size();
92 for (
unsigned int i = 0; i < lastChannelSize - 1; ++i) {
95 for (
int k = 0; k < payload.
Size(); ++k) {
97 msgCopy->Copy(payload.AtRef(k));
98 parts.
AddPart(std::move(msgCopy));
101 Send(parts, fOutChannelNames.back(), i);
104 Send(payload, fOutChannelNames.back(), lastChannelSize - 1);