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
15 /*!
16 * @file SynDDSMessagePubSubTypes.cpp
17 * This header file contains the implementation of the serialization functions.
18 *
19 * This file was generated by the tool fastcdrgen.
20 */
21
22
23 #include <fastcdr/FastBuffer.h>
24 #include <fastcdr/Cdr.h>
25
26 #include "SynDDSMessagePubSubTypes.h"
27
28 using SerializedPayload_t = eprosima::fastrtps::rtps::SerializedPayload_t;
29 using InstanceHandle_t = eprosima::fastrtps::rtps::InstanceHandle_t;
30
SynDDSMessagePubSubType()31 SynDDSMessagePubSubType::SynDDSMessagePubSubType()
32 {
33 setName("SynDDSMessage");
34 auto type_size = SynDDSMessage::getMaxCdrSerializedSize();
35 type_size += eprosima::fastcdr::Cdr::alignment(type_size, 4); /* possible submessage alignment */
36 m_typeSize = static_cast<uint32_t>(type_size) + 4; /*encapsulation*/
37 m_isGetKeyDefined = SynDDSMessage::isKeyDefined();
38 size_t keyLength = SynDDSMessage::getKeyMaxCdrSerializedSize() > 16 ?
39 SynDDSMessage::getKeyMaxCdrSerializedSize() : 16;
40 m_keyBuffer = reinterpret_cast<unsigned char*>(malloc(keyLength));
41 memset(m_keyBuffer, 0, keyLength);
42 }
43
~SynDDSMessagePubSubType()44 SynDDSMessagePubSubType::~SynDDSMessagePubSubType()
45 {
46 if (m_keyBuffer != nullptr)
47 {
48 free(m_keyBuffer);
49 }
50 }
51
serialize(void * data,SerializedPayload_t * payload)52 bool SynDDSMessagePubSubType::serialize(
53 void* data,
54 SerializedPayload_t* payload)
55 {
56 SynDDSMessage* p_type = static_cast<SynDDSMessage*>(data);
57
58 // Object that manages the raw buffer.
59 eprosima::fastcdr::FastBuffer fastbuffer(reinterpret_cast<char*>(payload->data), payload->max_size);
60 // Object that serializes the data.
61 eprosima::fastcdr::Cdr ser(fastbuffer, eprosima::fastcdr::Cdr::DEFAULT_ENDIAN, eprosima::fastcdr::Cdr::DDS_CDR);
62 payload->encapsulation = ser.endianness() == eprosima::fastcdr::Cdr::BIG_ENDIANNESS ? CDR_BE : CDR_LE;
63 // Serialize encapsulation
64 ser.serialize_encapsulation();
65
66 try
67 {
68 // Serialize the object.
69 p_type->serialize(ser);
70 }
71 catch (eprosima::fastcdr::exception::NotEnoughMemoryException& /*exception*/)
72 {
73 return false;
74 }
75
76 // Get the serialized length
77 payload->length = static_cast<uint32_t>(ser.getSerializedDataLength());
78 return true;
79 }
80
deserialize(SerializedPayload_t * payload,void * data)81 bool SynDDSMessagePubSubType::deserialize(
82 SerializedPayload_t* payload,
83 void* data)
84 {
85 //Convert DATA to pointer of your type
86 SynDDSMessage* p_type = static_cast<SynDDSMessage*>(data);
87
88 // Object that manages the raw buffer.
89 eprosima::fastcdr::FastBuffer fastbuffer(reinterpret_cast<char*>(payload->data), payload->length);
90
91 // Object that deserializes the data.
92 eprosima::fastcdr::Cdr deser(fastbuffer, eprosima::fastcdr::Cdr::DEFAULT_ENDIAN, eprosima::fastcdr::Cdr::DDS_CDR);
93
94 // Deserialize encapsulation.
95 deser.read_encapsulation();
96 payload->encapsulation = deser.endianness() == eprosima::fastcdr::Cdr::BIG_ENDIANNESS ? CDR_BE : CDR_LE;
97
98 try
99 {
100 // Deserialize the object.
101 p_type->deserialize(deser);
102 }
103 catch (eprosima::fastcdr::exception::NotEnoughMemoryException& /*exception*/)
104 {
105 return false;
106 }
107
108 return true;
109 }
110
getSerializedSizeProvider(void * data)111 std::function<uint32_t()> SynDDSMessagePubSubType::getSerializedSizeProvider(
112 void* data)
113 {
114 return [data]() -> uint32_t
115 {
116 return static_cast<uint32_t>(type::getCdrSerializedSize(*static_cast<SynDDSMessage*>(data))) +
117 4u /*encapsulation*/;
118 };
119 }
120
createData()121 void* SynDDSMessagePubSubType::createData()
122 {
123 return reinterpret_cast<void*>(new SynDDSMessage());
124 }
125
deleteData(void * data)126 void SynDDSMessagePubSubType::deleteData(
127 void* data)
128 {
129 delete(reinterpret_cast<SynDDSMessage*>(data));
130 }
131
getKey(void * data,InstanceHandle_t * handle,bool force_md5)132 bool SynDDSMessagePubSubType::getKey(
133 void* data,
134 InstanceHandle_t* handle,
135 bool force_md5)
136 {
137 if (!m_isGetKeyDefined)
138 {
139 return false;
140 }
141
142 SynDDSMessage* p_type = static_cast<SynDDSMessage*>(data);
143
144 // Object that manages the raw buffer.
145 eprosima::fastcdr::FastBuffer fastbuffer(reinterpret_cast<char*>(m_keyBuffer),
146 SynDDSMessage::getKeyMaxCdrSerializedSize());
147
148 // Object that serializes the data.
149 eprosima::fastcdr::Cdr ser(fastbuffer, eprosima::fastcdr::Cdr::BIG_ENDIANNESS);
150 p_type->serializeKey(ser);
151 if (force_md5 || SynDDSMessage::getKeyMaxCdrSerializedSize() > 16)
152 {
153 m_md5.init();
154 m_md5.update(m_keyBuffer, static_cast<unsigned int>(ser.getSerializedDataLength()));
155 m_md5.finalize();
156 for (uint8_t i = 0; i < 16; ++i)
157 {
158 handle->value[i] = m_md5.digest[i];
159 }
160 }
161 else
162 {
163 for (uint8_t i = 0; i < 16; ++i)
164 {
165 handle->value[i] = m_keyBuffer[i];
166 }
167 }
168 return true;
169 }
170
171