Apollo 10.0
自动驾驶开放平台
apollo::cyber::transport::UnderlayMessageType类 参考

This class represents the TopicDataType of the type UnderlayMessage defined by the user in the IDL file. 更多...

#include <underlay_message_type.h>

类 apollo::cyber::transport::UnderlayMessageType 继承关系图:
apollo::cyber::transport::UnderlayMessageType 的协作图:

Public 类型

using type = UnderlayMessage
 

Public 成员函数

 UnderlayMessageType ()
 
virtual ~UnderlayMessageType ()
 
virtual bool serialize (void *data, eprosima::fastrtps::rtps::SerializedPayload_t *payload) override
 
virtual bool deserialize (eprosima::fastrtps::rtps::SerializedPayload_t *payload, void *data) override
 
virtual std::function< uint32_t()> getSerializedSizeProvider (void *data) override
 
virtual bool getKey (void *data, eprosima::fastrtps::rtps::InstanceHandle_t *ihandle, bool force_md5=false) override
 
virtual void * createData () override
 
virtual void deleteData (void *data) override
 

Public 属性

MD5 m_md5
 
unsigned char * m_keyBuffer
 

详细描述

This class represents the TopicDataType of the type UnderlayMessage defined by the user in the IDL file.

在文件 underlay_message_type.h35 行定义.

成员类型定义说明

◆ type

构造及析构函数说明

◆ UnderlayMessageType()

apollo::cyber::transport::UnderlayMessageType::UnderlayMessageType ( )

在文件 underlay_message_type.cc35 行定义.

35 {
36 setName("UnderlayMessage");
38 type_size += eprosima::fastcdr::Cdr::alignment(
39 type_size, 4); /* possible submessage alignment */
40 m_typeSize = static_cast<uint32_t>(type_size) + 4; /*encapsulation*/
41 m_isGetKeyDefined = UnderlayMessage::isKeyDefined();
42 size_t keyLength = UnderlayMessage::getKeyMaxCdrSerializedSize() > 16
44 : 16;
45 m_keyBuffer = (unsigned char*)malloc(keyLength);
46 memset(m_keyBuffer, 0, keyLength);
47}
static bool isKeyDefined()
This function tells you if the Key has been defined for this type
static size_t getMaxCdrSerializedSize(size_t current_alignment=0)
This function returns the maximum serialized size of an object depending on the buffer alignment.
static size_t getKeyMaxCdrSerializedSize(size_t current_alignment=0)
This function returns the maximum serialized size of the Key of an object depending on the buffer ali...

◆ ~UnderlayMessageType()

apollo::cyber::transport::UnderlayMessageType::~UnderlayMessageType ( )
virtual

在文件 underlay_message_type.cc49 行定义.

49 {
50 if (m_keyBuffer != nullptr) {
51 free(m_keyBuffer);
52 }
53}

成员函数说明

◆ createData()

void * apollo::cyber::transport::UnderlayMessageType::createData ( )
overridevirtual

在文件 underlay_message_type.cc122 行定义.

122 {
123 return reinterpret_cast<void*>(new UnderlayMessage());
124}

◆ deleteData()

void apollo::cyber::transport::UnderlayMessageType::deleteData ( void *  data)
overridevirtual

在文件 underlay_message_type.cc126 行定义.

126 {
127 delete (reinterpret_cast<UnderlayMessage*>(data));
128}

◆ deserialize()

bool apollo::cyber::transport::UnderlayMessageType::deserialize ( eprosima::fastrtps::rtps::SerializedPayload_t *  payload,
void *  data 
)
overridevirtual

在文件 underlay_message_type.cc83 行定义.

84 {
85 try {
86 // Convert DATA to pointer of your type
87 UnderlayMessage* p_type = static_cast<UnderlayMessage*>(data);
88
89 // Object that manages the raw buffer.
90 eprosima::fastcdr::FastBuffer fastbuffer(
91 reinterpret_cast<char*>(payload->data), payload->length);
92
93 // Object that deserializes the data.
94 eprosima::fastcdr::Cdr deser(fastbuffer,
95 eprosima::fastcdr::Cdr::DEFAULT_ENDIAN,
96 eprosima::fastcdr::CdrVersion::DDS_CDR);
97
98 // Deserialize encapsulation.
99 deser.read_encapsulation();
100 payload->encapsulation =
101 deser.endianness() == eprosima::fastcdr::Cdr::BIG_ENDIANNESS ? CDR_BE
102 : CDR_LE;
103
104 // Deserialize the object.
105 p_type->deserialize(deser);
106 } catch (eprosima::fastcdr::exception::Exception& e) {
107 AERROR << "deserialize exception: " << e.what();
108 return false;
109 }
110 return true;
111}
#define AERROR
Definition log.h:44

◆ getKey()

bool apollo::cyber::transport::UnderlayMessageType::getKey ( void *  data,
eprosima::fastrtps::rtps::InstanceHandle_t *  ihandle,
bool  force_md5 = false 
)
overridevirtual

在文件 underlay_message_type.cc130 行定义.

132 {
133 RETURN_VAL_IF(!m_isGetKeyDefined, false);
134 UnderlayMessage* p_type = reinterpret_cast<UnderlayMessage*>(data);
135 eprosima::fastcdr::FastBuffer fastbuffer(
136 reinterpret_cast<char*>(m_keyBuffer),
137 UnderlayMessage::getKeyMaxCdrSerializedSize()); // Object that manages
138 // the raw buffer.
139 // Object that serializes the data.
140 eprosima::fastcdr::Cdr ser(fastbuffer,
141 eprosima::fastcdr::Cdr::BIG_ENDIANNESS);
142 p_type->serializeKey(ser);
143 if (force_md5 || UnderlayMessage::getKeyMaxCdrSerializedSize() > 16) {
144 m_md5.init();
145 m_md5.update(m_keyBuffer,
146 static_cast<unsigned int>(ser.get_serialized_data_length()));
147 m_md5.finalize();
148 for (uint8_t i = 0; i < 16; ++i) {
149 handle->value[i] = m_md5.digest[i];
150 }
151 } else {
152 for (uint8_t i = 0; i < 16; ++i) {
153 handle->value[i] = m_keyBuffer[i];
154 }
155 }
156 return true;
157}
#define RETURN_VAL_IF(condition, val)
Definition log.h:114

◆ getSerializedSizeProvider()

std::function< uint32_t()> apollo::cyber::transport::UnderlayMessageType::getSerializedSizeProvider ( void *  data)
overridevirtual

在文件 underlay_message_type.cc113 行定义.

114 {
115 return [data]() -> uint32_t {
116 return (uint32_t)type::getCdrSerializedSize(
117 *static_cast<UnderlayMessage*>(data)) +
118 4u /*encapsulation*/;
119 };
120}
static size_t getCdrSerializedSize(const UnderlayMessage &data, size_t current_alignment=0)
This function returns the serialized size of a data depending on the buffer alignment.

◆ serialize()

bool apollo::cyber::transport::UnderlayMessageType::serialize ( void *  data,
eprosima::fastrtps::rtps::SerializedPayload_t *  payload 
)
overridevirtual

在文件 underlay_message_type.cc55 行定义.

56 {
57 UnderlayMessage* p_type = reinterpret_cast<UnderlayMessage*>(data);
58 eprosima::fastcdr::FastBuffer fastbuffer(
59 reinterpret_cast<char*>(payload->data),
60 payload->max_size); // Object that manages the raw buffer.
61 eprosima::fastcdr::Cdr ser(
62 fastbuffer, eprosima::fastcdr::Cdr::DEFAULT_ENDIAN,
63 eprosima::fastcdr::CdrVersion::DDS_CDR); // Object that serializes the
64 // data.
65 payload->encapsulation =
66 ser.endianness() == eprosima::fastcdr::Cdr::BIG_ENDIANNESS ? CDR_BE
67 : CDR_LE;
68 try {
69 // Serialize encapsulation
70 ser.serialize_encapsulation();
71 // Serialize the object.
72 p_type->serialize(ser);
73 } catch (eprosima::fastcdr::exception::Exception& e) {
74 AERROR << "serialize exception: " << e.what();
75 return false;
76 }
77
78 payload->length =
79 (uint32_t)ser.get_serialized_data_length(); // Get the serialized length
80 return true;
81}

类成员变量说明

◆ m_keyBuffer

unsigned char* apollo::cyber::transport::UnderlayMessageType::m_keyBuffer

在文件 underlay_message_type.h55 行定义.

◆ m_md5

MD5 apollo::cyber::transport::UnderlayMessageType::m_md5

在文件 underlay_message_type.h54 行定义.


该类的文档由以下文件生成: