Fast DDS  Version 3.0.1
Fast DDS
Loading...
Searching...
No Matches
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
38namespace eprosima {
39namespace fastdds {
40namespace 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
58struct 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;
75
78 : encapsulation(CDR_BE)
79 , length(0)
80 , data(nullptr)
81 , max_size(0)
82 , pos(0)
83 {
84 }
85
90 uint32_t len)
92 {
93 this->reserve(len);
94 }
95
98 const SerializedPayload_t& other) = delete;
101 const SerializedPayload_t& other) = delete;
102
105 SerializedPayload_t&& other) noexcept
106 {
107 *this = std::move(other);
108 }
109
112 SerializedPayload_t&& other) noexcept;
113
119
120 bool operator == (
121 const SerializedPayload_t& other) const;
122
129 bool copy(
130 const SerializedPayload_t* serData,
131 bool with_limit = true);
132
139 SerializedPayload_t* serData);
140
145 void empty();
146
148 uint32_t new_size);
149
150};
151
152} // namespace rtps
153} // namespace fastdds
154} // namespace eprosima
155
156#endif // FASTDDS_RTPS_COMMON__SERIALIZEDPAYLOAD_HPP
An interface for classes responsible of serialized payload management.
Definition IPayloadPool.hpp:35
unsigned char octet
Definition Types.hpp:83
eProsima namespace.
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:89
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:104
SerializedPayload_t(const SerializedPayload_t &other)=delete
Copy constructor.
SerializedPayload_t()
Default constructor.
Definition SerializedPayload.hpp:77
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...