Skip to content

Commit 8188cee

Browse files
DPL: Extending interface of MessageSet
1 parent b3cc676 commit 8188cee

1 file changed

Lines changed: 83 additions & 0 deletions

File tree

Framework/Core/include/Framework/MessageSet.h

Lines changed: 83 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
#include "Framework/PartRef.h"
1515
#include <memory>
1616
#include <vector>
17+
#include <cassert>
1718

1819
namespace o2
1920
{
@@ -24,16 +25,98 @@ namespace framework
2425
struct MessageSet {
2526
std::vector<PartRef> parts;
2627

28+
MessageSet()
29+
: parts()
30+
{
31+
}
32+
33+
template <typename F>
34+
MessageSet(F&& getter, size_t size)
35+
: parts()
36+
{
37+
add(std::forward<F>(getter), size);
38+
}
39+
40+
MessageSet(MessageSet&& other)
41+
: parts(std::move(other.parts))
42+
{
43+
other.clear();
44+
}
45+
46+
MessageSet& operator=(MessageSet&& other)
47+
{
48+
if (&other == this) {
49+
return *this;
50+
}
51+
parts = std::move(other.parts);
52+
other.clear();
53+
return *this;
54+
}
55+
2756
size_t size() const
2857
{
2958
return parts.size();
3059
}
3160

61+
size_t getNumberOfPayloads(size_t part) const
62+
{
63+
// this is for upcoming change of message store
64+
return 1;
65+
}
66+
3267
void clear()
3368
{
3469
parts.clear();
3570
}
3671

72+
// this is more or less legacy
73+
void reset(PartRef&& ref)
74+
{
75+
clear();
76+
add(std::move(ref));
77+
}
78+
79+
void add(PartRef&& ref)
80+
{
81+
parts.emplace_back(std::move(ref));
82+
}
83+
84+
template <typename F>
85+
void add(F getter, size_t size)
86+
{
87+
for (size_t i = 0; i < size; ++i) {
88+
PartRef ref{std::move(getter(i)), std::move(getter(i + 1))};
89+
parts.emplace_back(std::move(ref));
90+
++i;
91+
}
92+
}
93+
94+
FairMQMessagePtr& header(size_t partIndex)
95+
{
96+
assert(partIndex < parts.size());
97+
return parts[partIndex].header;
98+
}
99+
100+
FairMQMessagePtr& payload(size_t partIndex, size_t payloadIndex = 0)
101+
{
102+
assert(partIndex < parts.size());
103+
// payload index will be supported in linear message store
104+
assert(payloadIndex == 0);
105+
return parts[partIndex].payload;
106+
}
107+
108+
FairMQMessagePtr const& header(size_t partIndex) const
109+
{
110+
assert(partIndex < parts.size());
111+
return parts[partIndex].header;
112+
}
113+
114+
FairMQMessagePtr const& payload(size_t partIndex) const
115+
{
116+
assert(partIndex < parts.size());
117+
return parts[partIndex].payload;
118+
}
119+
37120
PartRef& operator[](size_t index)
38121
{
39122
return parts[index];

0 commit comments

Comments
 (0)