Fast DDS  Version 3.6.1.0
Fast DDS
SerializedPayload.hpp
1 // Copyright 2016 Proyectos y Sistemas de Mantenimiento SL (eProsima).
2 //
3 // Licensed under the Apache License, Version 2.0 (the "License");
4 // you may not use this file except in compliance with the License.
5 // You may obtain a copy of the License at
6 //
7 // http://www.apache.org/licenses/LICENSE-2.0
8 //
9 // Unless required by applicable law or agreed to in writing, software
10 // distributed under the License is distributed on an "AS IS" BASIS,
11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 // See the License for the specific language governing permissions and
13 // limitations under the License.
14 
19 #ifndef FASTDDS_RTPS_COMMON__SERIALIZEDPAYLOAD_HPP
20 #define FASTDDS_RTPS_COMMON__SERIALIZEDPAYLOAD_HPP
21 
22 #include <cstring>
23 #include <new>
24 #include <stdexcept>
25 #include <cassert>
26 #include <stdint.h>
27 #include <stdlib.h>
28 
29 #include <fastdds/fastdds_dll.hpp>
30 #include <fastdds/rtps/common/Types.hpp>
31 #include <fastdds/rtps/history/IPayloadPool.hpp>
32 
38 namespace eprosima {
39 namespace fastdds {
40 namespace rtps {
41 
42 //Pre define data encapsulation schemes
43 #define CDR_BE 0x0000
44 #define CDR_LE 0x0001
45 #define PL_CDR_BE 0x0002
46 #define PL_CDR_LE 0x0003
47 
48 #if FASTDDS_IS_BIG_ENDIAN_TARGET
49 #define DEFAULT_ENCAPSULATION CDR_BE
50 #define PL_DEFAULT_ENCAPSULATION PL_CDR_BE
51 #else
52 #define DEFAULT_ENCAPSULATION CDR_LE
53 #define PL_DEFAULT_ENCAPSULATION PL_CDR_LE
54 #endif // FASTDDS_IS_BIG_ENDIAN_TARGET
55 
58 struct FASTDDS_EXPORTED_API SerializedPayload_t
59 {
61  static constexpr size_t representation_header_size = 4u;
62 
64  uint16_t encapsulation;
66  uint32_t length;
70  uint32_t max_size;
72  uint32_t pos;
74  IPayloadPool* payload_owner = nullptr;
76  bool is_serialized_key = false;
77 
80  : encapsulation(CDR_BE)
81  , length(0)
82  , data(nullptr)
83  , max_size(0)
84  , pos(0)
85  {
86  }
87 
92  uint32_t len)
94  {
95  this->reserve(len);
96  }
97 
100  const SerializedPayload_t& other) = delete;
102  SerializedPayload_t& operator = (
103  const SerializedPayload_t& other) = delete;
104 
107  SerializedPayload_t&& other) noexcept
108  {
109  *this = std::move(other);
110  }
111 
113  SerializedPayload_t& operator = (
114  SerializedPayload_t&& other) noexcept;
115 
121 
123  const SerializedPayload_t& other) const;
124 
131  bool copy(
132  const SerializedPayload_t* serData,
133  bool with_limit = true);
134 
141  SerializedPayload_t* serData);
142 
147  void empty();
148 
149  void reserve(
150  uint32_t new_size);
151 
152 };
153 
154 } // namespace rtps
155 } // namespace fastdds
156 } // namespace eprosima
157 
158 #endif // FASTDDS_RTPS_COMMON__SERIALIZEDPAYLOAD_HPP
An interface for classes responsible of serialized payload management.
Definition: IPayloadPool.hpp:35
uint8_t octet
Definition: Types.hpp:83
bool operator==(const BuiltinTransportsOptions &bto1, const BuiltinTransportsOptions &bto2)
Equal to operator.
Definition: BuiltinTransports.hpp:79
Structure SerializedPayload_t.
Definition: SerializedPayload.hpp:59
octet * data
Pointer to the data.
Definition: SerializedPayload.hpp:68
bool copy(const SerializedPayload_t *serData, bool with_limit=true)
Copy another structure (including allocating new space for the data).
SerializedPayload_t(uint32_t len)
Definition: SerializedPayload.hpp:91
uint16_t encapsulation
Encapsulation of the data as suggested in the RTPS 2.1 specification chapter 10.
Definition: SerializedPayload.hpp:64
uint32_t max_size
Maximum size of the payload.
Definition: SerializedPayload.hpp:70
bool reserve_fragmented(SerializedPayload_t *serData)
Allocate new space for fragmented data.
SerializedPayload_t(SerializedPayload_t &&other) noexcept
Move constructor.
Definition: SerializedPayload.hpp:106
SerializedPayload_t(const SerializedPayload_t &other)=delete
Copy constructor.
SerializedPayload_t()
Default constructor.
Definition: SerializedPayload.hpp:79
uint32_t length
Actual length of the data.
Definition: SerializedPayload.hpp:66
uint32_t pos
Position when reading.
Definition: SerializedPayload.hpp:72
~SerializedPayload_t()
Destructor It is expected to release the payload if the payload owner is not nullptr before destructi...