CARLA
 
载入中...
搜索中...
未找到
Point32.cpp
浏览该文件的文档.
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 Point32.cpp
17 * 此源文件包含了在 IDL 文件中所描述类型的定义。
18 * 该文件由工具 gen 生成。
19 */
20
21#ifdef _WIN32
22// Remove linker warning LNK4221 on Visual Studio
23// 在 Windows 平台(_WIN32 宏定义存在时)下,通过定义一个匿名命名空间及一个未使用的变量 dummy,消除 Visual Studio 的链接器警告 LNK4221
24namespace {
25char dummy;
26} // namespace
27#endif // _WIN32
28
29// 引入自定义的 Point32 头文件,其中应该包含了 Point32 类的前置声明以及相关依赖类型的定义等内容
30#include "Point32.h"
31// 引入 FastCDR 库中用于处理 Cdr(Common Data Representation,一种数据表示格式)相关操作的头文件
32#include <fastcdr/Cdr.h>
33
34// 引入 FastCDR 库中用于处理异常的头文件,并使用整个异常命名空间,方便后续抛出对应的异常类型
35#include <fastcdr/exceptions/BadParamException.h>
36using namespace eprosima::fastcdr::exception;
37
38// 引入 C++ 标准库中的 utility 头文件,用于支持 std::move 等实用功能,在移动语义相关操作中会用到
39#include <utility>
40
41// 定义一个宏,表示 Point32 类型的最大 CDR 序列化类型大小,这里设置为 12ULL(可能根据其内部数据结构及序列化规则确定,由于包含三个 float 类型成员,每个 float 占 4 字节,共 12 字节)
42#define geometry_msgs_msg_Point32_max_cdr_typesize 12ULL;
43// 定义一个宏,表示 Point32 类型的键(Key)的最大 CDR 序列化类型大小,设置为 0ULL,意味着目前暂未定义有效的键或者该类型在当前设计下不需要键相关功能(后续可按需扩展)
44#define geometry_msgs_msg_Point32_max_key_cdr_typesize 0ULL;
45
46// Point32 类的默认构造函数,用于初始化该类对象的各个成员变量,将表示三维坐标的成员变量 m_x、m_y、m_z 都初始化为 0.0,为对象提供一个默认的初始状态
48{
49 // 初始化成员变量 m_x 为 0.0,它代表三维空间中点的 x 坐标,初始化为 0 作为默认值
50 m_x = 0.0;
51 // 初始化成员变量 m_y 为 0.0,代表 y 坐标,同样初始化为 0
52 m_y = 0.0;
53 // 初始化成员变量 m_z 为 0.0,代表 z 坐标,初始化为 0
54 m_z = 0.0;
55}
56
57// Point32 类的默认析构函数,目前函数体为空,说明没有需要手动释放的资源(如动态分配的内存等),编译器会自动生成默认的析构逻辑来处理成员变量的销毁等操作,例如调用成员对象的析构函数(如果有)
61
62// Point32 类的拷贝构造函数,根据传入的另一个 Point32 对象进行拷贝创建新对象,对成员变量 m_x、m_y、m_z 进行逐个拷贝赋值,实现深拷贝效果,确保新对象和原对象的数据完全独立,具体的拷贝行为取决于 float 类型自身的拷贝语义(通常就是简单的值拷贝)
64 const Point32& x)
65{
66 m_x = x.m_x;
67 m_y = x.m_y;
68 m_z = x.m_z;
69}
70
71// Point32 类的移动构造函数,虽然这里对成员变量的赋值看起来和拷贝构造函数类似,但实际上通过 std::move 语义(尽管此处成员变量为简单的 float 类型,移动语义效果和拷贝基本相同,但遵循统一的编程规范),将传入对象的资源所有权转移到新创建的对象中,避免不必要的拷贝开销,适用于更复杂的对象或者涉及资源管理的场景
73 Point32&& x) noexcept
74{
75 m_x = x.m_x;
76 m_y = x.m_y;
77 m_z = x.m_z;
78}
79
80// Point32 类的拷贝赋值运算符重载,将一个 Point32 对象的值赋给当前对象,对成员变量 m_x、m_y、m_z 进行逐个赋值操作,实现对象间数据的复制,遵循拷贝语义进行赋值,使得当前对象能获取到传入对象的数据副本
82 const Point32& x)
83{
84 m_x = x.m_x;
85 m_y = x.m_y;
86 m_z = x.m_z;
87
88 return *this;
89}
90
91// Point32 类的移动赋值运算符重载,通过移动语义将一个 Point32 对象的资源所有权转移给当前对象,对成员变量使用 std::move 进行移动赋值(同样对于简单 float 类型效果类似拷贝,但符合编程规范),实现高效赋值操作,避免不必要的拷贝,提升性能(在复杂对象场景下更明显)
93 Point32&& x) noexcept
94{
95 m_x = x.m_x;
96 m_y = x.m_y;
97 m_z = x.m_z;
98
99 return *this;
100}
101
102// 比较运算符 == 的重载,用于比较当前对象与传入的 Point32 对象是否相等,通过比较两个对象的成员变量 m_x、m_y、m_z 是否分别相等来确定整个对象是否相等,提供了一种方便的方式来判断两个 Point32 对象的内容一致性
104 const Point32& x) const
105{
106 return (m_x == x.m_x && m_y == x.m_y && m_z == x.m_z);
107}
108
109// 比较运算符!= 的重载,通过调用 == 运算符并取反来判断当前对象与传入的 Point32 对象是否不相等,这是基于 == 运算符实现的一种便捷的相反判断逻辑,方便在不同场景下使用
111 const Point32& x) const
112{
113 return!(*this == x);
114}
115
116// 获取 Point32 类型对象根据当前缓冲区对齐方式的最大 CDR 序列化大小,这里忽略传入的当前对齐参数,直接返回预定义的该类型最大序列化大小常量值(即前面定义的 12ULL),此函数可用于在一些场景下(如分配缓冲区空间等)提前知晓该类型对象序列化后的最大可能长度
123
124// 计算给定 Point32 类型对象根据当前缓冲区对齐方式的 CDR 序列化大小,虽然传入了表示对象的数据参数,但这里并没有实际使用它(通过 `(void)data` 语句体现),只是按照固定的计算方式,考虑每个成员变量(都是 float 类型,占 4 字节,并考虑对齐要求)的序列化大小,最终返回总的序列化大小,该函数在实际进行序列化操作前,可准确计算出特定对象的序列化长度,有助于精准分配内存空间等操作
126 const geometry_msgs::msg::Point32& data,
127 size_t current_alignment)
128{
129 (void)data;
131 // 考虑 4 字节对齐,更新当前对齐位置,然后加上成员变量 m_x 的序列化大小(float 类型占 4 字节)
132 current_alignment += 4 + eprosima::fastcdr::Cdr::alignment(current_alignment, 4);
133 // 同样考虑 4 字节对齐,更新当前对齐位置,然后加上成员变量 m_y 的序列化大小
134 current_alignment += 4 + eprosima::fastcdr::Cdr::alignment(current_alignment, 4);
135 // 再次考虑 4 字节对齐,更新当前对齐位置,然后加上成员变量 m_z 的序列化大小
136 current_alignment += 4 + eprosima::fastcdr::Cdr::alignment(current_alignment, 4);
137
139}
140
141// 使用 CDR 格式对 Point32 类型对象进行序列化操作,将对象的成员变量 m_x、m_y、m_z 依次写入到给定的 Cdr 对象中,以便进行网络传输或存储等,这是将对象转换为可传输或存储格式的关键操作,按照特定的顺序和格式将数据写入
143 eprosima::fastcdr::Cdr& scdr)
144{
145 scdr << m_x;
146 scdr << m_y;
147 scdr << m_z;
148}
149
150// 使用 CDR 格式对 Point32 类型对象进行反序列化操作,从给定的 Cdr 对象中依次读取数据并赋值给对象的成员变量 m_x、m_y、m_z,将接收到的序列化数据还原为对象,与 serialize 函数相对应,实现从序列化数据恢复出原始对象的功能,确保数据在传输或存储后能正确还原
152 eprosima::fastcdr::Cdr& dcdr)
153{
154 dcdr >> m_x;
155 dcdr >> m_y;
156 dcdr >> m_z;
157}
158
159/*!
160 * @brief 此函数用于设置成员变量 x(即 m_x)的值,传入新的 float 类型值进行赋值,提供了一种外部修改 Point32 对象中 x 坐标值的方式
161 * @param _x 要设置给成员变量 x 的新值。
162 */
164 float _x)
165{
166 m_x = _x;
167}
168
169/*!
170 * @brief 此函数返回成员变量 x(即 m_x)的值,提供了一种只读的方式来获取 x 坐标的值,保障了数据的安全性,避免外部误修改
171 * @return 成员变量 x 的值。
172 */
174{
175 return m_x;
176}
177
178/*!
179 * @brief 此函数返回成员变量 x(即 m_x)的引用,外部可通过该引用获取和修改 x 坐标的值,提供了一种可读写的方式来访问 x 坐标,方便外部根据需要修改其值
180 * @return 成员变量 x 的引用。
181 */
183{
184 return m_x;
185}
186
187/*!
188 * @brief 此函数用于设置成员变量 y(即 m_y)的值,传入新的 float 类型值进行赋值,方便外部更新 y 坐标的值
189 * @param _y 要设置给成员变量 y 的新值。
190 */
192 float _y)
193{
194 m_y = _y;
195}
196
197/*!
198 * @brief 此函数返回成员变量 y(即 m_y)的值,提供了一种只读的方式来获取 y 坐标的值,用于外部获取该坐标信息但不修改
199 * @return 成员变量 y 的值。
200 */
202{
203 return m_y;
204}
205
206/*!
207 * @brief 此函数返回成员变量 y(即 m_y)的引用,外部可通过该引用获取和修改 y 坐标的值,便于外部按需改变该坐标值
208 * @return 成员变量 y 的引用。
209 */
211{
212 return m_y;
213}
214
215/*!
216 * @brief 此函数用于设置成员变量 z(即 m_z)的值,传入新的 float 类型值进行赋值,用于更新 z 坐标的值
217 * @param _z 要设置给成员变量 z 的新值。
218 */
220 float _z)
221{
222 m_z = _z;
223}
224
225/*!
226 * @brief 此函数返回成员变量 z(即 m_z)的值,提供了一种只读的方式来获取 z 坐标的值,供外部获取该坐标信息
227 * @return 成员变量 z 的值。
228 */
230{
231 return m_z;
232}
233
234/*!
235 * @brief 此函数返回成员变量 z(即 m_z)的引用,外部可通过该引用获取和修改 z 坐标的值,方便外部操作该坐标
236 * @return 成员变量 z 的引用。
237 */
239{
240 return m_z;
241}
242
243// 获取 Point32 类型对象的键(Key)根据当前缓冲区对齐方式的最大 CDR 序列化大小,这里忽略传入的当前对齐参数,直接返回预定义的该类型键的最大序列化大小常量值(即 0ULL,表示无有效键定义)
250
251// 判断 Point32 类型是否已经定义了键(Key),目前返回 false,表示该类型暂未定义有效的键,后续若需要可根据具体需求扩展键相关功能
253{
254 return false;
255}
256
257// 使用 CDR 格式对 Point32 类型对象的键(Key)成员进行序列化操作,目前函数体为空(只是将传入的 Cdr 对象忽略,意味着该类型当前无键需要序列化或者未实现具体序列化逻辑)
259 eprosima::fastcdr::Cdr& scdr) const
260{
261 (void) scdr;
262}
#define geometry_msgs_msg_Point32_max_key_cdr_typesize
Definition Point32.cpp:44
#define geometry_msgs_msg_Point32_max_cdr_typesize
Definition Point32.cpp:42
return current_alignment initial_alignment
This class represents the structure Point32 defined by the user in the IDL file.这个类表示用户在IDL(接口定义语言)文件...
Definition Point32.h:93
eProsima_user_DllExport void deserialize(eprosima::fastcdr::Cdr &cdr)
Definition Point32.cpp:151
eProsima_user_DllExport float z() const
eProsima_user_DllExport float x() const
此函数返回成员变量 x(即 m_x)的值,提供了一种只读的方式来获取 x 坐标的值,保障了数据的安全性,避免外部误修改
Definition Point32.cpp:173
eProsima_user_DllExport bool operator==(const Point32 &x) const
Definition Point32.cpp:103
static eProsima_user_DllExport size_t getCdrSerializedSize(const geometry_msgs::msg::Point32 &data, size_t current_alignment=0)
Definition Point32.cpp:125
eProsima_user_DllExport Point32 & operator=(const Point32 &x)
Definition Point32.cpp:81
static eProsima_user_DllExport bool isKeyDefined()
Definition Point32.cpp:252
eProsima_user_DllExport ~Point32()
Definition Point32.cpp:58
eProsima_user_DllExport bool operator!=(const Point32 &x) const
Definition Point32.cpp:110
eProsima_user_DllExport void serializeKey(eprosima::fastcdr::Cdr &cdr) const
Definition Point32.cpp:258
static eProsima_user_DllExport size_t getMaxCdrSerializedSize(size_t current_alignment=0)
Definition Point32.cpp:117
static eProsima_user_DllExport size_t getKeyMaxCdrSerializedSize(size_t current_alignment=0)
Definition Point32.cpp:244
eProsima_user_DllExport Point32()
Definition Point32.cpp:47
eProsima_user_DllExport void serialize(eprosima::fastcdr::Cdr &cdr) const
Definition Point32.cpp:142
eProsima_user_DllExport float y() const
此函数返回成员变量 y(即 m_y)的值,提供了一种只读的方式来获取 y 坐标的值,用于外部获取该坐标信息但不修改
Definition Point32.cpp:201