CARLA
 
载入中...
搜索中...
未找到
CarlaLineInvasion.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 CarlaLineInvasion.cpp
17 * 此源文件包含了在 IDL 文件中所描述类型的定义。
18 * 该文件由工具 gen 生成。
19 */
20
21#ifdef _WIN32
22// Remove linker warning LNK4221 on Visual Studio
23// 通过定义一个匿名命名空间及一个未使用的变量 dummy,用于消除 Visual Studio 中的链接器警告 LNK4221
24namespace {
25char dummy;
26} // namespace
27#endif // _WIN32
28// 引入自定义的 CarlaLineInvasion 头文件,可能包含了 LaneInvasionEvent 类的前置声明等相关内容
29#include "CarlaLineInvasion.h"
30// 引入 FastCDR 库中用于处理 Cdr(Common Data Representation,一种数据表示格式)相关操作的头文件
31#include <fastcdr/Cdr.h>
32// 引入 FastCDR 库中用于处理异常的头文件,这里导入了整个异常命名空间,方便后续抛出相关异常类型
33#include <fastcdr/exceptions/BadParamException.h>
34using namespace eprosima::fastcdr::exception;
35// 引入 C++ 标准库中的 utility 头文件,可能用于使用 std::move 等相关功能
36#include <utility>
37// 定义一些宏,用于表示不同消息类型的最大 CDR 序列化类型大小,这里的值可能是预计算或者根据某种规则确定的固定值
38#define carla_msgs_msg_std_msgs_msg_Header_max_cdr_typesize 268ULL;
39#define carla_msgs_msg_LaneInvasionEvent_max_cdr_typesize 672ULL;
40#define carla_msgs_msg_std_msgs_msg_Time_max_cdr_typesize 8ULL;
41#define carla_msgs_msg_std_msgs_msg_Header_max_key_cdr_typesize 0ULL;
42#define carla_msgs_msg_LaneInvasionEvent_max_key_cdr_typesize 0ULL;
43#define carla_msgs_msg_std_msgs_msg_Time_max_key_cdr_typesize 0ULL;
44// LaneInvasionEvent 类的默认构造函数,用于创建对象时进行默认的初始化操作,目前函数体为空,可能依赖成员变量的默认初始化行为
48// LaneInvasionEvent 类的默认析构函数,用于在对象生命周期结束时释放相关资源,目前函数体为空,可能意味着没有需要手动释放的资源,依赖编译器自动生成的析构逻辑来处理成员变量的销毁等操作
53// LaneInvasionEvent 类的拷贝构造函数,根据传入的另一个 LaneInvasionEvent 对象进行拷贝创建新对象,对成员变量进行逐个拷贝赋值,实现深拷贝效果(具体取决于成员变量自身的拷贝语义)
55 const LaneInvasionEvent& x)
56{
57 m_header = x.m_header;
58 m_crossed_lane_markings = x.m_crossed_lane_markings;
59}
60// LaneInvasionEvent 类的移动构造函数,通过移动语义,高效地将传入的 LaneInvasionEvent 对象资源所有权转移到新创建的对象中,对成员变量使用 std::move 进行移动赋值,避免不必要的拷贝开销
62 LaneInvasionEvent&& x) noexcept
63{
64 m_header = std::move(x.m_header);
65 m_crossed_lane_markings = std::move(x.m_crossed_lane_markings);
66}
67// LaneInvasionEvent 类的拷贝赋值运算符重载,将一个 LaneInvasionEvent 对象的值赋给当前对象,对成员变量进行逐个赋值操作,实现对象间数据的复制
69 const LaneInvasionEvent& x)
70{
71 m_header = x.m_header;
72 m_crossed_lane_markings = x.m_crossed_lane_markings;
73
74 return *this;
75}
76// LaneInvasionEvent 类的移动赋值运算符重载,通过移动语义将一个 LaneInvasionEvent 对象的资源所有权转移给当前对象,对成员变量使用 std::move 进行移动赋值,实现高效赋值操作,避免不必要的拷贝
78 LaneInvasionEvent&& x) noexcept
79{
80 m_header = std::move(x.m_header);
81 m_crossed_lane_markings = std::move(x.m_crossed_lane_markings);
82
83 return *this;
84}
85// 比较运算符 == 的重载,用于比较当前对象与传入的 LaneInvasionEvent 对象是否相等,通过比较两个对象的成员变量(消息头和越界车道标记)是否相等来确定整个对象是否相等
87 const LaneInvasionEvent& x) const
88{
89 return (m_header == x.m_header && m_crossed_lane_markings == x.m_crossed_lane_markings);
90}
91// 比较运算符!= 的重载,通过调用 == 运算符并取反来判断当前对象与传入的 LaneInvasionEvent 对象是否不相等
93 const LaneInvasionEvent& x) const
94{
95 return !(*this == x);
96}
97// 获取 LaneInvasionEvent 类型对象根据当前缓冲区对齐方式的最大 CDR 序列化大小,这里忽略传入的当前对齐参数,直接返回预定义的该类型最大序列化大小常量值
104// 计算给定 LaneInvasionEvent 类型对象根据当前缓冲区对齐方式的 CDR 序列化大小,通过依次计算消息头和越界车道标记向量等成员的序列化大小,并考虑对齐要求,最终返回总的序列化大小
107 size_t current_alignment)
108{
109 size_t initial_alignment = current_alignment;// 先计算消息头成员的序列化大小,并更新当前对齐位置
110 current_alignment += std_msgs::msg::Header::getCdrSerializedSize(data.header(), current_alignment);// 考虑 4 字节对齐,更新当前对齐位置
111 current_alignment += 4 + eprosima::fastcdr::Cdr::alignment(current_alignment, 4);
112
113 if (data.crossed_lane_markings().size() > 0)// 如果越界车道标记向量不为空,计算其序列化大小(每个元素占 4 字节,并考虑对齐),并更新当前对齐位置
114 {
115 current_alignment += (data.crossed_lane_markings().size() * 4) + eprosima::fastcdr::Cdr::alignment(current_alignment, 4);
116 }
117
119}
120// 使用 CDR 格式对 LaneInvasionEvent 类型对象进行序列化操作,将对象的成员变量(消息头和越界车道标记向量)依次写入到给定的 Cdr 对象中,以便进行网络传输或存储等
122 eprosima::fastcdr::Cdr& scdr) const
123{
124 scdr << m_header;
125 scdr << m_crossed_lane_markings;
126}
127// 使用 CDR 格式对 LaneInvasionEvent 类型对象进行反序列化操作,从给定的 Cdr 对象中依次读取数据并赋值给对象的成员变量(消息头和越界车道标记向量),将接收到的序列化数据还原为对象
129 eprosima::fastcdr::Cdr& dcdr)
130{
131 dcdr >> m_header;
132 dcdr >> m_crossed_lane_markings;
133}
134
135/*!
136 * @brief 此函数用于拷贝成员 header 的值,传入新的 std_msgs::msg::Header 对象进行赋值。
137 * @param _header 要拷贝到成员 header 的新值。
138 */
140 const std_msgs::msg::Header& _header)
141{
142 m_header = _header;
143}
144
145/*!
146 * @brief 此函数用于移动成员 header 的值,传入新的 std_msgs::msg::Header 对象进行资源所有权转移赋值。
147 * @param _header 要移动到成员 header 的新值。
148 */
150 std_msgs::msg::Header&& _header)
151{
152 m_header = std::move(_header);
153}
154
155/*!
156 * @brief 此函数返回成员 header 的常量引用,外部可通过该引用获取 header 的值,但不能修改它。
157 * @return 成员 header 的常量引用。
158 */
159const std_msgs::msg::Header& carla_msgs::msg::LaneInvasionEvent::header() const
160{
161 return m_header;
162}
163
164/*!
165 * @brief 此函数返回成员 header 的引用,外部可通过该引用获取和修改 header 的值。
166 * @return 成员 header 的引用。
167 */
169{
170 return m_header;
171}
172/*!
173 * @brief 此函数用于拷贝成员 crossed_lane_markings 的值,传入新的 std::vector<int32_t> 对象进行赋值。
174 * @param _crossed_lane_markings 要拷贝到成员 crossed_lane_markings 的新值。
175 */
177 const std::vector<int32_t>& _crossed_lane_markings)
178{
179 m_crossed_lane_markings = _crossed_lane_markings;
180}
181
182/*!
183 * @brief 此函数用于移动成员 crossed_lane_markings 的值,传入新的 std::vector<int32_t> 对象进行资源所有权转移赋值。
184 * @param _crossed_lane_markings 要移动到成员 crossed_lane_markings 的新值。
185 */
187 std::vector<int32_t>&& _crossed_lane_markings)
188{
189 m_crossed_lane_markings = std::move(_crossed_lane_markings);
190}
191
192/*!
193 * @brief 此函数返回成员 crossed_lane_markings 的常量引用,外部可通过该引用获取其值,但不能修改它。
194 * @return 成员 crossed_lane_markings 的常量引用。
195 */
197{
198 return m_crossed_lane_markings;
199}
200
201/*!
202 * @brief 此函数返回成员 crossed_lane_markings 的引用,外部可通过该引用获取和修改其值。
203 * @return 成员 crossed_lane_markings 的引用。
204 */
206{
207 return m_crossed_lane_markings;
208}
209// 获取 LaneInvasionEvent 类型对象的键(Key)根据当前缓冲区对齐方式的最大 CDR 序列化大小,这里忽略传入的当前对齐参数,直接返回预定义的该类型键的最大序列化大小常量值(目前为 0)
210
217// 判断 LaneInvasionEvent 类型是否已经定义了键(Key),目前返回 false,表示该类型未定义键
219{
220 return false;
221}
222// 使用 CDR 格式对 LaneInvasionEvent 类型对象的键(Key)成员进行序列化操作,目前函数体为空(只是将传入的 Cdr 对象忽略,可能表示该类型无键需要序列化或者未实现具体序列化逻辑)
224 eprosima::fastcdr::Cdr& scdr) const
225{
226 (void) scdr;
227}
#define carla_msgs_msg_LaneInvasionEvent_max_cdr_typesize
#define carla_msgs_msg_LaneInvasionEvent_max_key_cdr_typesize
return current_alignment initial_alignment
此类表示用户在IDL文件中定义的LaneInvasionEvent结构。这个类表示在IDL文件中用户定义的LaneInvasionEvent结构,通常用于处理车道入侵相关的消息事件,是整个消息结构体的主...
eProsima_user_DllExport void serialize(eprosima::fastcdr::Cdr &cdr) const
此函数使用CDR序列化方式对对象进行序列化。
eProsima_user_DllExport const std::vector< int32_t > & crossed_lane_markings() const
此函数返回成员crossed_lane_markings的常量引用。
eProsima_user_DllExport LaneInvasionEvent()
默认构造函数。 默认构造函数,用于创建一个默认初始化状态的LaneInvasionEvent对象
eProsima_user_DllExport void crossed_lane_markings(const std::vector< int32_t > &_crossed_lane_markings)
此函数将成员crossed_lane_markings中的值进行拷贝。
eProsima_user_DllExport ~LaneInvasionEvent()
默认析构函数。 默认析构函数,用于释放该对象占用的资源等清理操作
eProsima_user_DllExport bool operator==(const LaneInvasionEvent &x) const
相等比较运算符重载。
eProsima_user_DllExport void deserialize(eprosima::fastcdr::Cdr &cdr)
此函数使用CDR序列化方式对对象进行反序列化。
static eProsima_user_DllExport size_t getCdrSerializedSize(const carla_msgs::msg::LaneInvasionEvent &data, size_t current_alignment=0)
此函数根据缓冲区对齐方式返回数据的序列化大小。
eProsima_user_DllExport bool operator!=(const LaneInvasionEvent &x) const
不等比较运算符重载。
static eProsima_user_DllExport size_t getMaxCdrSerializedSize(size_t current_alignment=0)
此函数根据缓冲区对齐方式返回对象的最大序列化大小。
eProsima_user_DllExport LaneInvasionEvent & operator=(const LaneInvasionEvent &x)
拷贝赋值运算符重载。
static eProsima_user_DllExport size_t getKeyMaxCdrSerializedSize(size_t current_alignment=0)
此函数根据缓冲区对齐方式返回对象的键(Key)的最大序列化大小。
eProsima_user_DllExport const std_msgs::msg::Header & header() const
此函数返回成员header的常量引用。
eProsima_user_DllExport void serializeKey(eprosima::fastcdr::Cdr &cdr) const
此函数使用CDR序列化方式对对象的键(Key)成员进行序列化。
eProsima_user_DllExport void header(const std_msgs::msg::Header &_header)
此函数将成员header中的值进行拷贝。
std::vector< int32_t > m_crossed_lane_markings
static eProsima_user_DllExport bool isKeyDefined()
此函数告知是否已为该类型定义了键(Key)。 该静态函数用于判断该类型是否已经定义了键(Key),返回布尔值表示是否已定义