CARLA
 
载入中...
搜索中...
未找到
Transform.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 Transform.cpp
17 * This source file contains the definition of the described types in the IDL file.
18 *
19 * This file was generated by the tool gen.
20 */
21
22// 以下这段代码是针对 Windows 平台(_WIN32 被定义时)的预处理指令块,用于解决 Visual Studio 中的链接器警告 LNK4221。
23// 在 Visual Studio 编译链接过程中,可能会出现关于未使用的内联函数、变量等相关的链接器警告,通过以下方式来消除该警告。
24#ifdef _WIN32
25// Remove linker warning LNK4221 on Visual Studio
26namespace {
27// 定义一个匿名命名空间,在这个匿名命名空间内定义一个字符变量 dummy。
28// 这个变量本身在这里并没有实际的逻辑用途,只是为了满足 Visual Studio 链接器的一些要求,避免产生 LNK4221 警告。
29char dummy;
30} // namespace
31#endif // _WIN32
32
33#include "Transform.h"
34// 包含名为 "Transform.h" 的头文件,通常该头文件中会声明 Transform 类的相关信息,例如类的成员变量、成员函数的声明等,
35// 是当前实现代码(cpp 文件)对类定义进行具体实现的前置依赖,确保编译器知道 Transform 类的结构信息。
36
37#include <fastcdr/Cdr.h>
38// 引入 <fastcdr/Cdr.h> 头文件,它来自 fastcdr 库,该库常用于数据的序列化和反序列化操作(Common Data Representation,通用数据表示)。
39// 后续代码中会利用这个库提供的功能来实现 Transform 类对象的序列化和反序列化逻辑,比如将对象转换为字节流进行网络传输或存储等操作。
40
41#include <fastcdr/exceptions/BadParamException.h>
42// 包含 fastcdr 库中关于参数异常的头文件,这个头文件定义了在 fastcdr 相关操作中,如果参数出现不符合要求等情况时会抛出的异常类型。
43using namespace eprosima::fastcdr::exception;
44// 通过这个 using 声明,将 eprosima::fastcdr::exception 命名空间引入当前作用域,方便后续代码直接使用该命名空间下定义的异常类型,
45// 例如在序列化、反序列化等操作出现参数异常时,可以直接抛出相应的异常对象进行错误处理。
46
47#include <utility>
48// 包含 C++ 标准库中的 <utility> 头文件,这个头文件提供了一些实用的工具函数和类型,比如 std::move 函数。
49// 在代码中多处使用了 std::move,它用于将资源(比如对象中的某些成员变量所管理的资源,如动态分配的内存等)进行“移动”,
50// 避免不必要的拷贝操作,提高程序性能,特别是在涉及对象构造、赋值等场景中对资源管理很有帮助。
51
52// 以下是一系列宏定义,用于指定不同消息类型在 Cdr 序列化表示时的最大尺寸,分为普通序列化尺寸和用于键(key)的序列化尺寸。
53// 这些宏定义的值在后续的序列化相关操作中可能会被用来判断空间需求、进行内存分配等操作。
54#define geometry_msgs_msg_Vector3_max_cdr_typesize 24ULL;
55// 定义 Vector3 类型在 Cdr 序列化时的最大尺寸为 24 字节(ULL 表示无符号长整型字面量,即 unsigned long long 类型),
56// 这可能是根据 Vector3 类型的数据结构特点以及序列化格式规定所确定的最大可能占用空间。
57
58#define geometry_msgs_msg_Transform_max_cdr_typesize 56ULL;
59// 定义 Transform 类型在 Cdr 序列化时的最大尺寸为 56 字节,该类型可能由多个成员变量(比如包含 Vector3 和其他相关成员等)组成,
60// 其最大尺寸综合考虑了各部分序列化后的空间需求总和。
61
62#define geometry_msgs_msg_Quaternion_max_cdr_typesize 32ULL;
63// 定义 Quaternion 类型在 Cdr 序列化时的最大尺寸为 32 字节,Quaternion 通常用于表示旋转信息,其序列化后的空间大小在这里被定义为 32 字节。
64
65#define geometry_msgs_msg_Vector3_max_key_cdr_typesize 0ULL;
66// 定义 Vector3 类型用于键(key)的 Cdr 序列化最大尺寸为 0 字节,说明在当前的使用场景或设计中,Vector3 类型作为键进行序列化时不需要额外空间,
67// 可能意味着它不作为键来参与一些查找、索引等需要序列化键的操作,或者其键相关的表示方式不需要额外的字节来存储。
68
69#define geometry_msgs_msg_Transform_max_key_cdr_typesize 0ULL;
70// 类似地,定义 Transform 类型用于键的 Cdr 序列化最大尺寸为 0 字节,表明该类型在键相关的序列化场景下没有空间占用,
71// 即不存在特定的键序列化需求或者其键表示方式不需要额外空间存储。
72
73#define geometry_msgs_msg_Quaternion_max_key_cdr_typesize 0ULL;
74// 定义 Quaternion 类型用于键的 Cdr 序列化最大尺寸为 0 字节,同样表示其在作为键进行序列化时没有额外的空间占用情况。
75
76// Transform 类的默认构造函数,用于创建一个默认初始化的 Transform 对象。
77// 当前函数体为空,可能意味着在创建对象时不需要进行额外的显式初始化操作,对象的成员变量可能会采用其各自类型的默认初始化方式,
78// 例如基本数据类型会初始化为相应的默认值(如 int 类型初始化为 0 等),如果成员变量是自定义类类型,则会调用其默认构造函数进行初始化。
82
83// Transform 类的析构函数,在对象生命周期结束时被调用,用于释放对象所占用的资源。
84// 当前函数体为空,这可能是因为该类所管理的资源通过其他机制(比如成员变量本身是具有自动内存管理功能的类型,像智能指针等,
85// 或者成员变量所涉及的资源在其他地方已经被妥善处理)进行管理,不需要在这个析构函数中显式地释放资源。
89
90// Transform 类的拷贝构造函数,用于以另一个已存在的 Transform 对象(由参数 x 表示)来初始化新创建的 Transform 对象。
91// 通过将传入对象 x 的成员变量值复制到新对象的对应成员变量中,实现对象的拷贝操作。
92// 这里只是简单地对成员变量进行赋值,若成员变量涉及指针等情况且需要深拷贝(确保新对象的成员变量所指向的资源与原对象独立),
93// 则可能需要进一步完善此处的逻辑,比如对指针指向的内存进行重新分配并复制数据等操作。
95 const Transform& x)
96{
97 m_translation = x.m_translation;
98 m_rotation = x.m_rotation;
99}
100
101// Transform 类的移动构造函数,通过右值引用参数 x 接收一个即将被“移动”资源的对象,使用 std::move 操作将其成员变量的资源移动到新创建的对象中。
102// 这种移动操作避免了不必要的拷贝,特别是对于那些管理动态分配资源(如堆内存)的成员变量,能够高效地转移资源所有权,提高程序性能。
103// noexcept 关键字表示该函数不会抛出异常,这有助于编译器进行一些优化,比如在某些特定的代码生成和异常处理相关的场景中避免额外开销。
105 Transform&& x) noexcept
106{
107 m_translation = std::move(x.m_translation);
108 m_rotation = std::move(x.m_rotation);
109}
110
111// Transform 类的拷贝赋值运算符重载,用于实现两个 Transform 对象之间的赋值操作(例如 a = b,其中 a 和 b 是 Transform 类对象)。
112// 它将右边对象(参数 x 表示)的成员变量值复制到左边对象(即调用该运算符的对象,通过 *this 表示)的对应成员变量中,
113// 同样,若成员变量涉及复杂资源管理情况(如指针指向堆内存等),可能需要完善为深拷贝逻辑,以保证赋值后两个对象相互独立且资源管理正确。
115 const Transform& x)
116{
117 m_translation = x.m_translation;
118 m_rotation = x.m_rotation;
119
120 return *this;
121}
122
123// Transform 类的移动赋值运算符重载,实现了将右值引用对象(参数 x 表示)的资源移动给当前对象(通过 *this 表示)的功能。
124// 通过 std::move 操作高效地转移资源,避免多余的拷贝操作,提升性能,并且声明为 noexcept 表示不会抛出异常,利于编译器进行优化。
126 Transform&& x) noexcept
127{
128 m_translation = std::move(x.m_translation);
129 m_rotation = std::move(x.m_rotation);
130
131 return *this;
132}
133
134// 重载了相等比较运算符 (==),用于比较两个 Transform 类对象是否相等。
135// 通过分别比较两个对象的 m_translation(表示平移信息的成员变量,通常是 Vector3 类型,假设其也重载了 == 运算符)
136// 和 m_rotation(表示旋转信息的成员变量,通常是 Quaternion 类型,同样假设其重载了 == 运算符)成员变量是否相等,
137// 来确定整个 Transform 对象是否相等。
139 const Transform& x) const
140{
141 return (m_translation == x.m_translation && m_rotation == x.m_rotation);
142}
143
144// 重载了不等比较运算符 (!=),通过对已定义的相等比较运算符 (==) 的结果取反来判断两个 Transform 类对象是否不相等。
145// 这样的实现方式符合 C++ 中对相等和不等关系运算符的常规定义和使用习惯,简洁明了且复用了 == 运算符的逻辑,方便代码的理解和维护。
147 const Transform& x) const
148{
149 return!(*this == x);
150}
151
152// 获取 Transform 类对象在 Cdr 序列化时的最大尺寸的函数。
153// 参数 current_alignment 表示当前的对齐情况(在更复杂的序列化场景中可能会根据对齐要求来计算最终的序列化尺寸,
154// 但在这里当前代码只是将其强制转换为空操作,说明暂时未实际使用对齐相关逻辑),直接返回之前定义的宏
155// geometry_msgs_msg_Transform_max_cdr_typesize 所表示的固定最大尺寸值,用于告知相关序列化机制该对象可能占用的最大空间范围。
162
163// 获取 Transform 类对象实际 Cdr 序列化尺寸的函数,根据传入的具体 Transform 类对象 data 来计算其序列化后的实际大小。
164// 首先记录初始的对齐情况 initial_alignment,然后分别累加对象中 m_translation(通过调用 Vector3 类型的 getCdrSerializedSize 函数,
165// 假设该函数已正确定义来获取其序列化后的尺寸)和 m_rotation(通过调用 Quaternion 类型的相应获取序列化尺寸函数)成员变量序列化后的尺寸到 current_alignment,
166// 最后返回总的序列化尺寸(即当前对齐减去初始对齐,得到实际占用的空间大小),这样能准确计算出该对象序列化后具体需要的字节数。
177
178// 序列化函数,用于将 Transform 类对象的数据按照 Cdr 机制进行序列化,即将对象的状态转换为适合存储或传输的字节流形式。
179// 通过 eprosima::fastcdr::Cdr 类对象 scdr 的 << 运算符重载(前提是该库针对 Vector3 和 Quaternion 类型都有相应的 << 重载实现),
180// 依次将对象的 m_translation(表示平移的成员变量)和 m_rotation(表示旋转的成员变量)成员变量进行序列化操作,
181// 例如在网络通信中发送该对象的数据或者将对象持久化存储到文件等场景下,会先调用这个函数进行序列化处理。
183 eprosima::fastcdr::Cdr& scdr) const
184{
185 scdr << m_translation;
186 scdr << m_rotation;
187}
188
189// 反序列化函数,与序列化函数相对应,用于从给定的 Cdr 数据表示(通常是字节流形式)中恢复出 Transform 类对象的数据,
190// 即根据接收到的字节流重新构建出对象的状态。通过 eprosima::fastcdr::Cdr 类对象 dcdr 的 >> 运算符重载(同样假设对相关类型有对应的 >> 重载实现),
191// 依次读取数据来填充对象的 m_translation 和 m_rotation 成员变量,常用于从网络接收数据或者从存储介质读取数据后还原对象的场景。
193 eprosima::fastcdr::Cdr& dcdr)
194{
195 dcdr >> m_translation;
196 dcdr >> m_rotation;
197}
198
199/*!
200 * @brief This function copies the value in member translation
201 * @param _translation New value to be copied in member translation
202 */
203// 这个函数用于将传入的 Vector3 类型的 _translation 参数值复制给当前 Transform 类对象的 m_translation 成员变量。
204// 提供了一种外部设置对象平移部分数据的方式,方便根据实际需求更新对象所表示的空间平移信息。
206 const geometry_msgs::msg::Vector3& _translation)
207{
208 m_translation = _translation;
209}
210
211/*!
212 * @brief This function moves the value in member translation
213 * @param _translation New value to be moved in member translation
214 */
215// 该函数用于将传入的右值引用类型的 _translation(Vector3 类型)参数的值通过 std::move 操作移动给当前 Transform 类对象的 m_translation 成员变量。
216// 实现了资源的高效移动,避免不必要的拷贝,常用于将临时对象或者即将不再使用的对象的资源转移到当前对象的场景,提高性能,
217// 例如在处理一些临时构建的表示平移信息的 Vector3 对象时,可以直接移动其资源到当前 Transform 对象的对应成员变量中。
219 geometry_msgs::msg::Vector3&& _translation)
220{
221 m_translation = std::move(_translation);
222}
223
224/*!
225 * @brief This function returns a constant reference to member translation
226 * @return Constant reference to member translation
227 */
228// 这个函数返回当前 Transform 类对象中 m_translation 成员变量的常量引用,使得外部代码可以获取对象表示的平移信息,
229// 但不能通过这个引用修改 m_translation 的值,保证了数据的只读访问特性,常用于在不改变对象状态的情况下获取其平移相关信息,
230// 比如在一些计算、判断或者展示对象当前状态的逻辑中使用。
232{
233 return m_translation;
234}
235
236/*!
237 * @brief This function returns a reference to member translation
238 * @return Reference to member translation
239 */
240// 该函数返回当前 Transform 类对象中 m_translation 成员变量的普通引用,允许外部代码通过这个引用修改 m_translation 的值,
241// 提供了一种可写的访问方式,方便在需要改变对象平移信息的场景下进行操作,比如更新对象在空间中的位置等情况时使用。
246
247/*!
248 * @brief This function copies the value in member rotation
249 * @param _rotation New value to be copied in member rotation
250 */
251// 这个函数用于将传入的 Quaternion 类型的 _rotation 参数值复制给当前 Transform 类对象的 m_rotation 成员变量,
252// 提供了一种外部设置对象旋转部分数据的方式,便于根据实际需求更新对象所表示的空间旋转信息。
254 const geometry_msgs::msg::Quaternion& _rotation)
255{
256 m_rotation = _rotation;
257}
258
259/*!
260 * @brief This function moves the value in member rotation
261 * @param _rotation New value to be moved in member rotation
262 */
263// 该函数用于将传入的右值引用类型的 _rotation(Quaternion 类型)参数的值通过 std::move 操作移动给当前 Transform 类对象的 m_rotation 成员变量,
264// 实现了资源的高效移动,避免不必要的拷贝,常用于将临时对象或者即将不再使用的对象的资源转移到当前对象的场景,提高性能,
265// 例如在处理一些临时构建的表示旋转信息的 Quaternion 对象时,可以直接移动其资源到当前 Transform 对象的对应成员变量中。
268{
269 m_rotation = std::move(_rotation);
270}
271
272/*!
273 * @brief This function returns a constant reference to member rotation
274 * @return Constant reference to member rotation
275 */
276// 这个函数返回当前 Transform 类对象中 m_rotation 成员变量的常量引用,使得外部代码可以获取对象表示的旋转信息,
277// 但不能通过这个引用修改 m_rotation 的值,保证了
278/*!
279 * @brief This function returns a reference to member rotation
280 * @return Reference to member rotation
281 */
282// 此函数用于返回 `Transform` 类对象中 `m_rotation` 成员变量的引用。
283// 通过返回引用,外部代码可以借助这个引用直接对 `m_rotation` 成员变量进行修改操作,
284// 例如在需要更新对象所表示的旋转信息时,能够方便地对其赋值或者调用 `Quaternion` 类型(假设 `m_rotation` 是 `Quaternion` 类型)
285// 对应的成员函数来改变旋转相关的属性等,提供了一种可写的访问方式来操作对象的旋转部分数据。
290
291// 以下函数用于获取 `Transform` 类对象在涉及键(`key`)的 `Cdr` 序列化时的最大尺寸。
292// 参数 `current_alignment` 表示当前的对齐情况,不过在这里当前代码只是将其强制转换为空操作(通过 `static_cast<void>(current_alignment)`),
293// 意味着暂时未实际使用对齐相关逻辑。直接返回之前定义的宏 `geometry_msgs_msg_Transform_max_key_cdr_typesize` 所表示的固定最大尺寸值,
294// 这个值通常用于告知相关序列化机制,在把该对象当作键进行序列化时可能占用的最大空间范围,便于内存分配等相关操作的规划和处理。
301
302// 此函数用于判断 `Transform` 类对象是否定义了键(`key`)相关的内容。
303// 当前函数直接返回 `false`,说明在当前的设计和使用场景下,`Transform` 类型通常没有特定的键定义情况,
304// 或者说该类对象在作为某种数据结构(比如用于查找的数据表中的元素等情况)中的键时,没有实际有效的键相关信息被定义,
305// 具体是否需要改变这个返回值要根据实际的业务逻辑和数据使用方式来确定。
307{
308 return false;
309}
310
311// 这个函数用于对 `Transform` 类对象的键(`key`)进行序列化操作,不过当前函数体中只是将传入的 `eproxima::fastcdr::Cdr` 类型的参数 `scdr` 进行了空操作(通过 `(void) scdr`)。
312// 这意味着在当前的实现中,由于前面 `isKeyDefined` 函数返回 `false` 表示没有实际的键定义,所以这里并没有真正执行有效的序列化逻辑,
313// 若后续业务需求发生变化,需要对 `Transform` 类对象定义有效的键并且进行序列化操作时,就需要完善这个函数内部的实现,
314// 比如根据键的具体组成和序列化规则,往 `scdr` 中写入相应的数据来完成键的序列化过程,以便在一些基于键的数据操作(如查找、索引等)场景中使用。
316 eprosima::fastcdr::Cdr& scdr) const
317{
318 (void) scdr;
319}
return current_alignment initial_alignment
#define geometry_msgs_msg_Transform_max_key_cdr_typesize
Definition TFMessage.cpp:45
#define geometry_msgs_msg_Transform_max_cdr_typesize
Definition TFMessage.cpp:38
This class represents the structure Quaternion defined by the user in the IDL file.
Definition Quaternion.h:71
static eProsima_user_DllExport size_t getCdrSerializedSize(const geometry_msgs::msg::Quaternion &data, size_t current_alignment=0)
This function returns the serialized size of a data depending on the buffer alignment.
此类表示用户在IDL文件中定义的Transform结构。
eProsima_user_DllExport bool operator==(const Transform &x) const
相等比较运算符重载,用于比较两个Transform对象是否相等。
static eProsima_user_DllExport size_t getCdrSerializedSize(const geometry_msgs::msg::Transform &data, size_t current_alignment=0)
此函数根据缓冲区对齐方式,返回给定数据的序列化大小。
static eProsima_user_DllExport size_t getMaxCdrSerializedSize(size_t current_alignment=0)
此函数根据缓冲区对齐方式,返回一个对象的最大序列化大小。
eProsima_user_DllExport const geometry_msgs::msg::Quaternion & rotation() const
此函数返回成员变量rotation的常量引用,外部可通过该引用访问成员变量rotation的值,但不能修改它。
geometry_msgs::msg::Vector3 m_translation
static eProsima_user_DllExport bool isKeyDefined()
此函数用于判断对于该类型是否已经定义了键(Key)。
eProsima_user_DllExport void translation(const geometry_msgs::msg::Vector3 &_translation)
此函数用于拷贝成员变量translation的值,将传入的新值拷贝到成员translation中。
static eProsima_user_DllExport size_t getKeyMaxCdrSerializedSize(size_t current_alignment=0)
此函数根据缓冲区对齐方式,返回对象的键(Key)的最大序列化大小。键通常用于在某些数据存储或查找场景中唯一标识对象。
eProsima_user_DllExport void rotation(const geometry_msgs::msg::Quaternion &_rotation)
此函数用于拷贝成员变量rotation的值,将传入的新值拷贝到成员rotation中。
eProsima_user_DllExport bool operator!=(const Transform &x) const
不等比较运算符重载,用于比较两个Transform对象是否不相等。
eProsima_user_DllExport void deserialize(eprosima::fastcdr::Cdr &cdr)
此函数使用CDR序列化机制对对象进行反序列化操作,将接收到的序列化数据还原为对象,参数cdr是包含序列化数据的对象。
eProsima_user_DllExport ~Transform()
默认析构函数,用于释放对象占用的资源等清理操作。
Definition Transform.cpp:86
eProsima_user_DllExport void serialize(eprosima::fastcdr::Cdr &cdr) const
此函数使用CDR序列化机制对对象进行序列化操作,将对象转换为适合传输或存储的格式(通常是二进制格式),参数cdr是用于执行序列化的对象。
eProsima_user_DllExport void serializeKey(eprosima::fastcdr::Cdr &cdr) const
此函数使用CDR序列化机制对对象的键成员进行序列化操作,将键相关的数据转换为适合传输或存储的格式。
eProsima_user_DllExport const geometry_msgs::msg::Vector3 & translation() const
此函数返回成员变量translation的常量引用,外部可通过该引用访问成员变量translation的值,但不能修改它。
eProsima_user_DllExport Transform & operator=(const Transform &x)
拷贝赋值运算符重载,用于将一个Transform对象的值拷贝赋值给另一个对象。
geometry_msgs::msg::Quaternion m_rotation
eProsima_user_DllExport Transform()
默认构造函数,用于创建一个默认初始化状态的Transform对象。
Definition Transform.cpp:79
此类表示用户在 IDL 文件中定义的 Vector3 结构。 <>
Definition Vector3.h:72
static eProsima_user_DllExport size_t getCdrSerializedSize(const geometry_msgs::msg::Vector3 &data, size_t current_alignment=0)
此函数返回数据的序列化大小 取决于缓冲区对齐。
Definition Vector3.cpp:111