Skip to content

Commit e69458b

Browse files
mkrzewicmatthiasrichter
authored andcommitted
Hide header::Stack internals in preparation of future updates
1 parent 8c1362c commit e69458b

File tree

6 files changed

+33
-31
lines changed

6 files changed

+33
-31
lines changed

Algorithm/test/headerstack.cxx

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ BOOST_AUTO_TEST_CASE(test_headerstack)
4444
o2::header::Stack stack(dh, nh);
4545

4646
// check that the call without any other arguments is compiling
47-
o2::algorithm::dispatchHeaderStackCallback(stack.buffer.get(), stack.bufferSize);
47+
o2::algorithm::dispatchHeaderStackCallback(stack.data(), stack.size());
4848

4949
// lambda functor given as argument for dispatchHeaderStackCallback
5050
auto checkDataHeader = [&dh] (const auto & header) {
@@ -60,26 +60,26 @@ BOOST_AUTO_TEST_CASE(test_headerstack)
6060
};
6161

6262
// check extraction of headers via callbacks
63-
o2::algorithm::dispatchHeaderStackCallback(stack.buffer.get(), stack.bufferSize,
63+
o2::algorithm::dispatchHeaderStackCallback(stack.data(), stack.size(),
6464
o2::header::DataHeader(),
6565
checkDataHeader,
6666
Name8Header(),
6767
checkNameHeader
6868
);
6969

7070
// check extraction of only one header via callback
71-
o2::algorithm::dispatchHeaderStackCallback(stack.buffer.get(), stack.bufferSize,
71+
o2::algorithm::dispatchHeaderStackCallback(stack.data(), stack.size(),
7272
Name8Header(),
7373
checkNameHeader
7474
);
7575

7676
// check that the call without any other arguments is compiling
77-
o2::algorithm::parseHeaderStack(stack.buffer.get(), stack.bufferSize);
77+
o2::algorithm::parseHeaderStack(stack.data(), stack.size());
7878

7979
// check extraction of headers via object references
8080
o2::header::DataHeader targetDataHeader;
8181
Name8Header targetNameHeader;
82-
o2::algorithm::parseHeaderStack(stack.buffer.get(), stack.bufferSize,
82+
o2::algorithm::parseHeaderStack(stack.data(), stack.size(),
8383
targetDataHeader,
8484
targetNameHeader
8585
);

DataFormats/Headers/include/Headers/DataHeader.h

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -446,7 +446,12 @@ auto get(const void* buffer, size_t len = 0)
446446
// - arguments can be headers, or stacks, all will be concatenated in a new Stack
447447
/// - returns a Stack ready to be shipped.
448448
struct Stack {
449+
protected:
450+
using Buffer = std::unique_ptr<byte[]>;
451+
size_t bufferSize;
452+
Buffer buffer;
449453

454+
public:
450455
// This is ugly and needs fixing BUT:
451456
// we need a static deleter for fairmq.
452457
// TODO: maybe use allocator_traits if custom allocation is desired
@@ -455,17 +460,14 @@ struct Stack {
455460
// The copy can be avoided if we construct in place inside a FairMQMessage directly (instead of
456461
// allocating a unique_ptr we would hold a FairMQMessage which for the large part has similar semantics).
457462
//
458-
using Buffer = std::unique_ptr<byte[]>;
459463
static std::default_delete<byte[]> sDeleter;
460464
static void freefn(void* /*data*/, void* hint) {
461465
Stack::sDeleter(static_cast<byte*>(hint));
462466
}
463467

464-
size_t bufferSize;
465-
Buffer buffer;
466-
467468
byte* data() const {return buffer.get();}
468469
size_t size() const {return bufferSize;}
470+
void release() {buffer.release();}
469471

470472
///The magic constructor: takes arbitrary number of arguments and serialized them
471473
/// into the buffer.

DataFormats/Headers/test/testDataHeader.cxx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -166,10 +166,10 @@ namespace o2 {
166166
Stack s1{ DataHeader{ gDataDescriptionInvalid, gDataOriginInvalid, DataHeader::SubSpecificationType{ 0 }, 0 },
167167
NameHeader<9>{ "somename" } };
168168

169-
const DataHeader* h1 = get<DataHeader*>(s1.buffer.get());
169+
const DataHeader* h1 = get<DataHeader*>(s1.data());
170170
BOOST_CHECK(h1 != nullptr);
171171
BOOST_CHECK(*h1 == dh1);
172-
const NameHeader<0>* h2 = get<NameHeader<0>*>(s1.buffer.get());
172+
const NameHeader<0>* h2 = get<NameHeader<0>*>(s1.data());
173173
BOOST_CHECK(h2 != nullptr);
174174
BOOST_CHECK(0 == std::strcmp(h2->getName(), "somename"));
175175
BOOST_CHECK(h2->description == NameHeader<0>::sHeaderType);

Framework/Core/src/DataAllocator.cxx

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -64,11 +64,11 @@ DataAllocator::newChunk(const Output& spec, size_t size) {
6464
//we have to move the incoming data
6565
o2::header::Stack headerStack{dh, dph};
6666
FairMQMessagePtr headerMessage = mDevice->NewMessageFor(channel, 0,
67-
headerStack.buffer.get(),
68-
headerStack.bufferSize,
67+
headerStack.data(),
68+
headerStack.size(),
6969
&o2::header::Stack::freefn,
70-
headerStack.buffer.get());
71-
headerStack.buffer.release();
70+
headerStack.data());
71+
headerStack.release();
7272
FairMQMessagePtr payloadMessage = mDevice->NewMessageFor(channel, 0, size);
7373
auto dataPtr = payloadMessage->GetData();
7474
auto dataSize = payloadMessage->GetSize();
@@ -99,11 +99,11 @@ DataAllocator::adoptChunk(const Output& spec, char *buffer, size_t size, fairmq_
9999
//we have to move the incoming data
100100
o2::header::Stack headerStack{dh, dph};
101101
FairMQMessagePtr headerMessage = mDevice->NewMessageFor(channel, 0,
102-
headerStack.buffer.get(),
103-
headerStack.bufferSize,
102+
headerStack.data(),
103+
headerStack.size(),
104104
&o2::header::Stack::freefn,
105-
headerStack.buffer.get());
106-
headerStack.buffer.release();
105+
headerStack.data());
106+
headerStack.release();
107107

108108
FairMQParts parts;
109109

@@ -135,11 +135,11 @@ DataAllocator::headerMessageFromOutput(Output const &spec,
135135
//we have to move the incoming data
136136
o2::header::Stack headerStack{dh, dph};
137137
FairMQMessagePtr headerMessage = mDevice->NewMessageFor(channel, 0,
138-
headerStack.buffer.get(),
139-
headerStack.bufferSize,
138+
headerStack.data(),
139+
headerStack.size(),
140140
&o2::header::Stack::freefn,
141-
headerStack.buffer.get());
142-
headerStack.buffer.release();
141+
headerStack.data());
142+
headerStack.release();
143143
return std::move(headerMessage);
144144
}
145145

Framework/Core/src/ExternalFairMQDeviceProxy.cxx

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -38,11 +38,11 @@ void broadcastMessage(FairMQDevice &device, o2::header::Stack &&headerStack, Fai
3838
// FIXME: this assumes there is only one output from here... This should
3939
// really do the matchmaking between inputs and output channels.
4040
FairMQMessagePtr headerMessage = device.NewMessageFor(channel, index,
41-
headerStack.buffer.get(),
42-
headerStack.bufferSize,
41+
headerStack.data(),
42+
headerStack.size(),
4343
&o2::header::Stack::freefn,
44-
headerStack.buffer.get());
45-
headerStack.buffer.release();
44+
headerStack.data());
45+
headerStack.release();
4646
FairMQParts out;
4747
out.AddPart(std::move(headerMessage));
4848
out.AddPart(std::move(payloadMessage));

Utilities/O2Device/include/O2Device/O2Device.h

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -74,11 +74,11 @@ class O2Device : public FairMQDevice
7474
o2::header::Stack headerStack{std::move(incomingStack)};
7575
FairMQMessagePtr dataMessage{std::move(incomingDataMessage)};
7676

77-
FairMQMessagePtr headerMessage = NewMessage(headerStack.buffer.get(),
78-
headerStack.bufferSize,
77+
FairMQMessagePtr headerMessage = NewMessage(headerStack.data(),
78+
headerStack.size(),
7979
&o2::header::Stack::freefn,
80-
headerStack.buffer.get());
81-
headerStack.buffer.release();
80+
headerStack.data());
81+
headerStack.release();
8282

8383
parts.AddPart(std::move(headerMessage));
8484
parts.AddPart(std::move(dataMessage));

0 commit comments

Comments
 (0)