1414#include " Framework/PartRef.h"
1515#include < memory>
1616#include < vector>
17+ #include < cassert>
1718
1819namespace o2
1920{
@@ -24,16 +25,98 @@ namespace framework
2425struct 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