Line data Source code
1 : /*
2 : *
3 : *
4 : * Distributed under the OpenDDS License.
5 : * See: http://www.opendds.org/license.html
6 : */
7 :
8 : #include "DCPS/DdsDcps_pch.h" //Only the _pch include should start with DCPS/
9 :
10 : #include "MessageBlock.h"
11 :
12 : #include <algorithm>
13 :
14 : OPENDDS_BEGIN_VERSIONED_NAMESPACE_DECL
15 :
16 : namespace OpenDDS {
17 : namespace DCPS {
18 :
19 1 : MessageBlock::MessageBlock(size_t size)
20 1 : : data_()
21 1 : , rd_ptr_()
22 1 : , wr_ptr_()
23 : {
24 1 : ACE_Allocator* const alloc = ACE_Allocator::instance();
25 1 : ACE_NEW_MALLOC(data_,
26 : (ACE_Data_Block*) alloc->malloc(sizeof(ACE_Data_Block)),
27 : ACE_Data_Block(size, ACE_Message_Block::MB_DATA, 0, alloc, 0,
28 : 0, alloc));
29 : }
30 :
31 1 : MessageBlock::MessageBlock(const char* data, size_t size)
32 1 : : data_()
33 1 : , rd_ptr_()
34 1 : , wr_ptr_(size)
35 : {
36 1 : ACE_Allocator* const alloc = ACE_Allocator::instance();
37 1 : ACE_NEW_MALLOC(data_,
38 : (ACE_Data_Block*) alloc->malloc(sizeof(ACE_Data_Block)),
39 : ACE_Data_Block(size, ACE_Message_Block::MB_DATA, data, alloc, 0,
40 : ACE_Message_Block::DONT_DELETE, alloc));
41 : }
42 :
43 700 : MessageBlock::MessageBlock(const ACE_Message_Block& amb)
44 700 : : data_(amb.data_block()->duplicate())
45 700 : , rd_ptr_(amb.rd_ptr() - amb.base())
46 700 : , wr_ptr_(amb.wr_ptr() - amb.base())
47 700 : {}
48 :
49 2686 : MessageBlock::MessageBlock(const MessageBlock& rhs)
50 2686 : : data_(rhs.data_->duplicate())
51 2686 : , rd_ptr_(rhs.rd_ptr_)
52 2686 : , wr_ptr_(rhs.wr_ptr_)
53 2686 : {}
54 :
55 4837 : MessageBlock::~MessageBlock()
56 : {
57 4837 : if (data_) {
58 3388 : data_->release();
59 : }
60 4837 : }
61 :
62 : void
63 217 : MessageBlock::swap(MessageBlock& rhs)
64 : {
65 217 : std::swap(data_, rhs.data_);
66 217 : std::swap(rd_ptr_, rhs.rd_ptr_);
67 217 : std::swap(wr_ptr_, rhs.wr_ptr_);
68 217 : }
69 :
70 : MessageBlock&
71 0 : MessageBlock::operator=(const MessageBlock& rhs)
72 : {
73 0 : if (&rhs != this) {
74 0 : MessageBlock copy(rhs);
75 0 : swap(copy);
76 0 : }
77 0 : return *this;
78 : }
79 :
80 : #ifdef ACE_HAS_CPP11
81 1449 : MessageBlock::MessageBlock(MessageBlock&& rhs)
82 1449 : : data_(rhs.data_)
83 1449 : , rd_ptr_(rhs.rd_ptr_)
84 1449 : , wr_ptr_(rhs.wr_ptr_)
85 : {
86 1449 : rhs.data_ = 0;
87 1449 : }
88 :
89 : MessageBlock&
90 217 : MessageBlock::operator=(MessageBlock&& rhs)
91 : {
92 217 : swap(rhs);
93 217 : return *this;
94 : }
95 : #endif
96 :
97 0 : void swap(MessageBlock& lhs, MessageBlock& rhs)
98 : {
99 0 : lhs.swap(rhs);
100 0 : }
101 :
102 : } // DCPS
103 : } // OPENDDS
104 :
105 : OPENDDS_END_VERSIONED_NAMESPACE_DECL
|