LCOV - code coverage report
Current view: top level - DCPS - MessageBlock.cpp (source / functions) Hit Total Coverage
Test: coverage.info Lines: 40 49 81.6 %
Date: 2023-04-30 01:32:43 Functions: 8 10 80.0 %

          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

Generated by: LCOV version 1.16