LCOV - code coverage report
Current view: top level - DCPS - DataSampleHeader.inl (source / functions) Hit Total Coverage
Test: coverage.info Lines: 77 80 96.2 %
Date: 2023-04-30 01:32:43 Functions: 7 7 100.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             : ACE_INLINE
       9        1902 : OpenDDS::DCPS::DataSampleHeader::DataSampleHeader()
      10        1902 :   : message_id_(0)
      11        1902 :   , submessage_id_(0)
      12        1902 :   , byte_order_(ACE_CDR_BYTE_ORDER)
      13        1902 :   , coherent_change_(0)
      14        1902 :   , historic_sample_(0)
      15        1902 :   , lifespan_duration_(0)
      16        1902 :   , group_coherent_(0)
      17        1902 :   , content_filter_(0)
      18        1902 :   , sequence_repair_(0)
      19        1902 :   , more_fragments_(0)
      20        1902 :   , cdr_encapsulation_(0)
      21        1902 :   , key_fields_only_(0)
      22        1902 :   , reserved_1(0)
      23        1902 :   , reserved_2(0)
      24        1902 :   , reserved_3(0)
      25        1902 :   , reserved_4(0)
      26        1902 :   , reserved_5(0)
      27        1902 :   , reserved_6(0)
      28        1902 :   , message_length_(0)
      29        1902 :   , sequence_()
      30        1902 :   , source_timestamp_sec_(0)
      31        1902 :   , source_timestamp_nanosec_(0)
      32        1902 :   , lifespan_duration_sec_(0)
      33        1902 :   , lifespan_duration_nanosec_(0)
      34        1902 :   , publication_id_(GUID_UNKNOWN)
      35        1902 :   , publisher_id_(GUID_UNKNOWN)
      36        1902 :   , serialized_size_(0)
      37             : {
      38        1902 : }
      39             : 
      40             : ACE_INLINE
      41          31 : OpenDDS::DCPS::DataSampleHeader::DataSampleHeader(ACE_Message_Block& buffer)
      42          31 :   : message_id_(0)
      43          31 :   , submessage_id_(0)
      44          31 :   , byte_order_(ACE_CDR_BYTE_ORDER)
      45          31 :   , coherent_change_(0)
      46          31 :   , historic_sample_(0)
      47          31 :   , lifespan_duration_(0)
      48          31 :   , group_coherent_(0)
      49          31 :   , content_filter_(0)
      50          31 :   , sequence_repair_(0)
      51          31 :   , more_fragments_(0)
      52          31 :   , cdr_encapsulation_(0)
      53          31 :   , key_fields_only_(0)
      54          31 :   , reserved_1(0)
      55          31 :   , reserved_2(0)
      56          31 :   , reserved_3(0)
      57          31 :   , reserved_4(0)
      58          31 :   , reserved_5(0)
      59          31 :   , reserved_6(0)
      60          31 :   , message_length_(0)
      61          31 :   , sequence_()
      62          31 :   , source_timestamp_sec_(0)
      63          31 :   , source_timestamp_nanosec_(0)
      64          31 :   , lifespan_duration_sec_(0)
      65          31 :   , lifespan_duration_nanosec_(0)
      66          31 :   , publication_id_(GUID_UNKNOWN)
      67          31 :   , publisher_id_(GUID_UNKNOWN)
      68             : {
      69          31 :   this->init(&buffer);
      70          31 : }
      71             : 
      72             : ACE_INLINE
      73             : OpenDDS::DCPS::DataSampleHeader&
      74           2 : OpenDDS::DCPS::DataSampleHeader::operator=(ACE_Message_Block& buffer)
      75             : {
      76           2 :   this->init(&buffer);
      77           2 :   return *this;
      78             : }
      79             : 
      80             : ACE_INLINE
      81             : size_t OpenDDS::DCPS::DataSampleHeader::get_serialized_size() const
      82             : {
      83             :   return serialized_size_;
      84             : }
      85             : 
      86             : ACE_INLINE
      87          46 : size_t OpenDDS::DCPS::DataSampleHeader::get_max_serialized_size()
      88             : {
      89             :   return 1 + // message_id_;
      90             :          1 + // submessage_id_;
      91             :          2 + // flags
      92             :          4 + // message_length_;
      93             :          8 + // sequence_;
      94             :          4 + // source_timestamp_sec_;
      95             :          4 + // source_timestamp_nanosec_;
      96             :          4 + // lifespan_duration_sec_;
      97             :          4 + // lifespan_duration_nanosec_;
      98             :         16 + // publication_id_;
      99          46 :         16 ; // publisher_id_;
     100             :   // content_filter_entries_ is not marsahled into the same Data Block
     101             :   // so it is not part of the max_serialized_size() which is used to allocate
     102             : }
     103             : 
     104             : /// The clear_flag and set_flag methods are a hack to update the
     105             : /// header flags after a sample has been serialized without
     106             : /// deserializing the entire message. This method will break if
     107             : /// the current Serializer behavior changes.
     108             : 
     109             : ACE_INLINE
     110             : void
     111             : OpenDDS::DCPS::DataSampleHeader::clear_flag(DataSampleHeaderFlag flag,
     112             :                                             ACE_Message_Block* buffer)
     113             : {
     114             :   char* base = buffer->base();
     115             : 
     116             :   // verify sufficient length exists:
     117             :   if (static_cast<size_t>(buffer->end() - base) < FLAGS_OFFSET + 1) {
     118             :     ACE_ERROR((LM_ERROR,
     119             :                ACE_TEXT("(%P|%t) ERROR: DataSampleHeader::clear_flag: ")
     120             :                ACE_TEXT("ACE_Message_Block too short (missing flags octet).\n")));
     121             :     return;
     122             :   }
     123             : 
     124             :   MaybeGuard g(buffer->locking_strategy());
     125             :   base[FLAGS_OFFSET] &= ~mask_flag(flag);
     126             : }
     127             : 
     128             : ACE_INLINE
     129             : void
     130           3 : OpenDDS::DCPS::DataSampleHeader::set_flag(DataSampleHeaderFlag flag,
     131             :                                           ACE_Message_Block* buffer)
     132             : {
     133           3 :   char* base = buffer->base();
     134             : 
     135             :   // verify sufficient length exists:
     136           3 :   if (static_cast<size_t>(buffer->end() - base) < FLAGS_OFFSET + 1) {
     137           0 :     ACE_ERROR((LM_ERROR,
     138             :                ACE_TEXT("(%P|%t) ERROR: DataSampleHeader::set_flag: ")
     139             :                ACE_TEXT("ACE_Message_Block too short (missing flags octet).\n")));
     140           0 :     return;
     141             :   }
     142             : 
     143           3 :   MaybeGuard g(buffer->locking_strategy());
     144           3 :   base[FLAGS_OFFSET] |= mask_flag(flag);
     145           3 : }
     146             : 
     147             : ACE_INLINE
     148             : bool
     149           7 : OpenDDS::DCPS::DataSampleHeader::test_flag(DataSampleHeaderFlag flag,
     150             :                                            const ACE_Message_Block* buffer)
     151             : {
     152           7 :   char* base = buffer->base();
     153             : 
     154             :   // verify sufficient length exists:
     155           7 :   if (static_cast<size_t>(buffer->end() - base) < FLAGS_OFFSET + 1) {
     156           0 :     ACE_ERROR_RETURN((LM_ERROR,
     157             :                       ACE_TEXT("(%P|%t) ERROR: DataSampleHeader::set_flag: ")
     158             :                       ACE_TEXT("ACE_Message_Block too short (missing flags octet).\n")), false);
     159             :   }
     160             : 
     161           7 :   MaybeGuard g(const_cast<ACE_Message_Block*>(buffer)->locking_strategy());
     162           7 :   return base[FLAGS_OFFSET] & mask_flag(flag);
     163           7 : }
     164             : 
     165             : ACE_INLINE
     166             : bool
     167          12 : OpenDDS::DCPS::DataSampleHeader::valid_data() const
     168             : {
     169          12 :   return message_id_ == SAMPLE_DATA;
     170             : }

Generated by: LCOV version 1.16