CARLA
 
载入中...
搜索中...
未找到
Image.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 Image.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#ifdef _WIN32
23// Remove linker warning LNK4221 on Visual Studio
24namespace {
25char dummy;
26} // namespace
27#endif // _WIN32
28
29#include "Image.h"
30#include <fastcdr/Cdr.h>
31
32// 引入fastcdr库中关于异常处理的头文件,以便后续能处理相关异常情况
33#include <fastcdr/exceptions/BadParamException.h>
34using namespace eprosima::fastcdr::exception;
35
36#include <utility>
37
38// 定义一个宏,表示builtin_interfaces_msg_Time类型在CDR序列化时最大的类型大小为8字节(无符号长整型字面量)
39#define builtin_interfaces_msg_Time_max_cdr_typesize 8ULL;
40// 定义一个宏,表示sensor_msgs_msg_Image类型在CDR序列化时最大的类型大小为648字节(无符号长整型字面量)
41#define sensor_msgs_msg_Image_max_cdr_typesize 648ULL;
42// 定义一个宏,表示std_msgs_msg_Header类型在CDR序列化时最大的类型大小为268字节(无符号长整型字面量)
43#define std_msgs_msg_Header_max_cdr_typesize 268ULL;
44// 定义一个宏,表示builtin_interfaces_msg_Time类型在CDR键相关序列化时最大的类型大小为0字节(无符号长整型字面量),可能意味着该类型不存在键相关序列化的特定大小情况
45#define builtin_interfaces_msg_Time_max_key_cdr_typesize 0ULL;
46// 定义一个宏,类似于上面,sensor_msgs_msg_Image类型在CDR键相关序列化时最大的类型大小为0字节,可能表示其键相关序列化无额外大小开销
47#define sensor_msgs_msg_Image_max_key_cdr_typesize 0ULL;
48// 定义一个宏,std_msgs_msg_Header类型在CDR键相关序列化时最大的类型大小为0字节,同样可能意味着对应情况不存在额外大小占用
49#define std_msgs_msg_Header_max_key_cdr_typesize 0ULL;
50
52{
53 // std_msgs::msg::Header m_header
54
55 // unsigned long m_height
56 m_height = 0;
57 // unsigned long m_width
58 m_width = 0;
59 // string m_encoding
60 m_encoding ="";
61 // uint8 m_is_bigendian
63 // unsigned long m_step
64 m_step = 0;
65 // sequence<uint8> m_data
66}
67
68// sensor_msgs::msg::Image类的析构函数,当前函数体为空,可能在子类中会有具体的资源释放等相关实现逻辑(如果有需要释放的资源的话)
72
73// sensor_msgs::msg::Image类的拷贝构造函数,用于通过已有的同类型对象(这里是const Image& x)来创建一个新的Image对象,并将传入对象的各个成员变量的值复制到新创建的对象中
75 const Image& x)
76{
77 // 复制Header成员变量的值
78 m_header = x.m_header;
79 // 复制图像高度成员变量的值
80 m_height = x.m_height;
81 // 复制图像宽度成员变量的值
82 m_width = x.m_width;
83 // 复制图像编码格式成员变量的值
84 m_encoding = x.m_encoding;
85 // 复制是否大端序成员变量的值
86 m_is_bigendian = x.m_is_bigendian;
87 // 复制图像每行字节数(步长)成员变量的值
88 m_step = x.m_step;
89 // 复制图像数据成员变量的值(这里可能是存储图像像素数据等的容器,比如数组或某种数据结构)
90 m_data = x.m_data;
91}
92
93// sensor_msgs::msg::Image类的移动构造函数,用于通过右值引用的方式,将传入对象(这里是Image&& x,表示可以将其资源“移动”过来而不是复制,避免不必要的深拷贝开销)的资源转移到新创建的Image对象中
95 Image&& x) noexcept
96{
97 // 使用std::move将传入对象的Header成员变量的资源转移给新对象的对应成员变量,原对象的该成员变量之后应处于一种可析构但不应再访问其原有资源的有效状态(通常是一些内部指针等被置空等情况)
98 m_header = std::move(x.m_header);
99 // 移动图像高度成员变量的值(这里实际只是简单赋值,因为基本类型不存在资源管理的转移问题,但保持统一的移动语义写法)
100 m_height = x.m_height;
101 // 移动图像宽度成员变量的值(同理,基本类型简单赋值)
102 m_width = x.m_width;
103 // 使用std::move转移图像编码格式成员变量的资源(若其内部有动态分配内存等资源管理情况)
104 m_encoding = std::move(x.m_encoding);
105 // 移动是否大端序成员变量的值(基本类型简单赋值)
106 m_is_bigendian = x.m_is_bigendian;
107 // 移动图像每行字节数(步长)成员变量的值(基本类型简单赋值)
108 m_step = x.m_step;
109 // 使用std::move转移图像数据成员变量的资源(比如如果是动态分配内存存储图像数据的情况,转移内存所有权)
110 m_data = std::move(x.m_data);
111}
112
113// sensor_msgs::msg::Image类的拷贝赋值运算符重载函数,用于将一个已有的Image对象(const Image& x)的各成员变量值复制到当前对象(*this)中,并返回当前对象的引用,以支持链式赋值操作
115 const Image& x)
116{
117 // 复制Header成员变量的值到当前对象
118 m_header = x.m_header;
119 // 复制图像高度成员变量的值到当前对象
120 m_height = x.m_height;
121 // 复制图像宽度成员变量的值到当前对象
122 m_width = x.m_width;
123 // 复制图像编码格式成员变量的值到当前对象
124 m_encoding = x.m_encoding;
125 // 复制是否大端序成员变量的值到当前对象
126 m_is_bigendian = x.m_is_bigendian;
127 // 复制图像每行字节数(步长)成员变量的值到当前对象
128 m_step = x.m_step;
129 // 复制图像数据成员变量的值到当前对象
130 m_data = x.m_data;
131
132 return *this;
133}
134
135// sensor_msgs::msg::Image类的移动赋值运算符重载函数,用于将一个右值引用的Image对象(Image&& x)的资源转移到当前对象(*this)中,并返回当前对象的引用,支持链式赋值,同时避免不必要的复制开销
137 Image&& x) noexcept
138{
139 // 使用std::move转移Header成员变量的资源到当前对象
140 m_header = std::move(x.m_header);
141 // 移动图像高度成员变量的值到当前对象(基本类型简单赋值,遵循移动语义写法)
142 m_height = x.m_height;
143 // 移动图像宽度成员变量的值到当前对象(基本类型简单赋值)
144 m_width = x.m_width;
145 // 使用std::move转移图像编码格式成员变量的资源到当前对象
146 m_encoding = std::move(x.m_encoding);
147 // 移动是否大端序成员变量的值到当前对象(基本类型简单赋值)
148 m_is_bigendian = x.m_is_bigendian;
149 // 移动图像每行字节数(步长)成员变量的值到当前对象(基本类型简单赋值)
150 m_step = x.m_step;
151 // 使用std::move转移图像数据成员变量的资源到当前对象
152 m_data = std::move(x.m_data);
153
154 return *this;
155}
156
157// 重载相等运算符(==),用于比较当前Image对象和另一个Image对象(const Image& x)是否相等,通过逐个比较各成员变量的值来判断,若所有成员变量都相等,则返回true,否则返回false
159 const Image& x) const
160{
161 return (m_header == x.m_header && m_height == x.m_height && m_width == x.m_width && m_encoding == x.m_encoding && m_is_bigendian == x.m_is_bigendian && m_step == x.m_step && m_data == x.m_data);
162}
163
164// 重载不等运算符(!=),通过调用相等运算符(==)取反的方式来判断当前Image对象和另一个Image对象(const Image& x)是否不相等,若相等运算符返回false,则该函数返回true,反之返回false
166 const Image& x) const
167{
168 return!(*this == x);
169}
170
171// 获取该Image对象在CDR序列化时的最大尺寸(以字节为单位),这里忽略传入的当前对齐参数(current_alignment),直接返回之前定义好的该类型的最大CDR序列化类型大小(通过宏定义sensor_msgs_msg_Image_max_cdr_typesize获取)
178
179// 获取给定Image对象(const sensor_msgs::msg::Image& data)在CDR序列化后的实际大小(以字节为单位),考虑了当前的对齐要求(current_alignment),按照一定顺序依次计算各成员变量序列化后占用的字节数,并累加起来得到最终的序列化大小,最后返回当前对齐位置与初始对齐位置的差值作为序列化后的大小
181 const sensor_msgs::msg::Image& data,
182 size_t current_alignment)
183{
185 // 先计算Header成员变量序列化后的大小,并更新当前对齐位置
186 current_alignment += std_msgs::msg::Header::getCdrSerializedSize(data.header(), current_alignment);
187 // 处理图像高度成员变量,考虑对齐要求后增加相应字节数(这里可能是按4字节对齐,具体由Cdr::alignment函数确定)
188 current_alignment += 4 + eprosima::fastcdr::Cdr::alignment(current_alignment, 4);
189 // 处理图像宽度成员变量,类似地考虑对齐后增加字节数
190 current_alignment += 4 + eprosima::fastcdr::Cdr::alignment(current_alignment, 4);
191 // 处理图像编码格式成员变量,计算其序列化后的大小(包含字符串长度及可能的额外字节用于表示结束符等,同时考虑对齐)
192 current_alignment += 4 + eprosima::fastcdr::Cdr::alignment(current_alignment, 4) + data.encoding().size() + 1;
193 // 处理是否大端序成员变量,考虑对齐后增加字节数(这里按1字节对齐)
194 current_alignment += 1 + eprosima::fastcdr::Cdr::alignment(current_alignment, 1);
195 // 处理图像每行字节数(步长)成员变量,考虑对齐后增加字节数(按4字节对齐)
196 current_alignment += 4 + eprosima::fastcdr::Cdr::alignment(current_alignment, 4);
197 // 处理图像数据成员变量,如果数据大小大于0,则根据数据的实际大小及对齐要求计算序列化后的字节数
198 if (data.data().size() > 0)
199 {
200 current_alignment += (data.data().size() * 1) + eprosima::fastcdr::Cdr::alignment(current_alignment, 1);
201 }
202
204}
205
206// 将当前Image对象进行CDR序列化,将各成员变量按照一定顺序写入到给定的CDR对象(eprosima::fastcdr::Cdr& scdr)中,这里使用了CDR对象的流插入运算符(<<)来实现各成员变量的序列化操作
208 eprosima::fastcdr::Cdr& scdr) const
209{
210 scdr << m_header;
211 scdr << m_height;
212 scdr << m_width;
213 scdr << m_encoding.c_str();
214 scdr << m_is_bigendian;
215 scdr << m_step;
216 scdr << m_data;
217}
218
219// 从给定的CDR对象(eprosima::fastcdr::Cdr& dcdr)中进行反序列化操作,将各成员变量的值按照序列化时的顺序依次读取出来,赋值给当前Image对象的各对应成员变量,这里使用了CDR对象的流提取运算符(>>)来实现各成员变量的反序列化操作
221 eprosima::fastcdr::Cdr& dcdr)
222{
223 // 从 Fast CDR 对象中反序列化数据到 Image 对象的成员变量
224 dcdr >> m_header; // 反序列化头部
225 dcdr >> m_height; // 反序列化图像高度
226 dcdr >> m_width; // 反序列化图像宽度
227 dcdr >> m_encoding; // 反序列化图像编码格式
228 dcdr >> m_is_bigendian; // 反序列化图像数据的字节序
229 dcdr >> m_step; // 反序列化每行数据的字节数
230 dcdr >> m_data; // 反序列化实际的图像数据
231}
232
233/*!
234 * @brief 此函数复制成员变量 header 的值
235 * @param _header 要复制的新值
236 */
238 const std_msgs::msg::Header& _header)
239{
240 // 将提供的 header 值复制到成员变量 m_header 中
241 m_header = _header;
242}
243
244/*!
245 * @brief 此函数移动成员变量 header 的值
246 * @param _header 要移动的新值
247 */
249 std_msgs::msg::Header&& _header)
250{
251 // 将提供的 header 值移动到成员变量 m_header 中
252 m_header = std::move(_header);
253}
254
255/*!
256 * @brief 此函数返回成员变量 header 的常量引用
257 * @return 成员变量 header 的常量引用
258 */
259const std_msgs::msg::Header& sensor_msgs::msg::Image::header() const
260{
261 // 返回成员变量 m_header 的常量引用
262 return m_header;
263}
264
265/*!
266 * @brief 此函数返回成员变量 header 的引用
267 * @return 成员变量 header 的引用
268 */
269std_msgs::msg::Header& sensor_msgs::msg::Image::header()
270{
271 // 返回成员变量 m_header 的可变引用
272 return m_header;
273}
274
275/*!
276 * @brief 此函数设置成员变量 height 的值
277 * @param _height 新的高度值
278 */
280 uint32_t _height)
281{
282 // 设置成员变量 m_height 为新值
283 m_height = _height;
284}
285
286/*!
287 * @brief 此函数返回成员变量 height 的值
288 * @return 成员变量 height 的值
289 */
291{
292 // 返回当前的高度成员变量 m_height 的值
293 return m_height;
294}
295
296/*!
297 * @brief 此函数返回成员变量 height 的引用
298 * @return 成员变量 height 的引用
299 */
301{
302 // 返回成员变量 m_height 的可变引用
303 return m_height;
304}
305
306/*!
307 * @brief 此函数设置成员变量 width 的值
308 * @param _width 新的宽度值
309 */
311 uint32_t _width)
312{
313 // 设置成员变量 m_width 为新值
314 m_width = _width;
315}
316
317/*!
318 * @brief 此函数返回成员变量 width 的值
319 * @return 成员变量 width 的值
320 */
322{
323 // 返回当前的宽度成员变量 m_width 的值
324 return m_width;
325}
326
327/*!
328 * @brief 此函数返回成员变量 width 的引用
329 * @return 成员变量 width 的引用
330 */
332{
333 // 返回成员变量 m_width 的可变引用
334 return m_width;
335}
336
337/*!
338 * @brief 此函数复制成员变量 encoding 的值
339 * @param _encoding 要复制的新编码值
340 */
342 const std::string& _encoding)
343{
344 // 将提供的编码字符串复制到成员变量 m_encoding 中
345 m_encoding = _encoding;
346}
347
348/*!
349 * @brief 此函数移动成员变量 encoding 的值
350 * @param _encoding 要移动的新编码值
351 */
353 std::string&& _encoding)
354{
355 // 将提供的编码字符串移动到成员变量 m_encoding 中
356 m_encoding = std::move(_encoding);
357}
358
359/*!
360 * @brief This function returns a constant reference to member encoding
361 * @return Constant reference to member encoding
362 */
363// 返回成员变量m_encoding的常引用,该函数用于获取图像编码相关信息,不会修改成员变量的值
364const std::string& sensor_msgs::msg::Image::encoding() const
365{
366 return m_encoding;
367}
368
369// 此函数返回成员encoding的引用
371{
372 return m_encoding;
373}
374
375// 此函数用于设置成员is_bigendian的值
377 uint8_t _is_bigendian)
378{
379 m_is_bigendian = _is_bigendian;
380}
381
382// 此函数返回成员is_bigendian的值,用于获取字节序相关的设置情况
384{
385 return m_is_bigendian;
386}
387
388// 此函数返回成员is_bigendian的引用,通过该引用可以对成员is_bigendian进行读写操作
390{
391 return m_is_bigendian;
392}
393
394// 此函数用于设置成员step的值
396 uint32_t _step)
397{
398 m_step = _step;
399}
400
401// 此函数返回成员step的值,用于获取与图像相关的步长等对应的值
403{
404 return m_step;
405}
406
407// 此函数返回成员step的引用,通过该引用可以对成员step进行读写操作
409{
410 return m_step;
411}
412
413//此函数用于将传入的参数_data的值复制给成员data,实现对图像数据的赋值操作(通过复制方式)
414 要复制到成员data中的新值,是一个包含uint8_t类型元素的向量,代表图像数据
415
417 const std::vector<uint8_t>& _data)
418{
419 m_data = _data;
420}
421
422// 此函数用于将传入的参数_data的值移动给成员data,实现对图像数据的赋值操作(通过移动方式,相较于复制可能更高效地转移资源所有权)
423 要移动到成员data中的新值,是一个包含uint8_t类型元素的向量,代表图像数据
424
426 std::vector<uint8_t>&& _data)
427{
428 m_data = std::move(_data);
429}
430
431//
432 此函数返回成员data的常引用,用于获取图像数据,但不允许通过该引用修改成员data的值
433 成员data的常引用,指向存储图像数据的向量
434const std::vector<uint8_t>& sensor_msgs::msg::Image::data() const
435{
436 return m_data;
437}
438/*!
439 * @brief This function returns a reference to member data
440 * @return Reference to member data
441 */
442// 定义一个成员函数,用于返回存储图像数据的std::vector<uint8_t>类型的成员变量m_data的引用。
443// 通过返回引用,可以方便地在外部对该图像数据容器进行操作,比如读取、修改其中的数据等。
444std::vector<uint8_t>& sensor_msgs::msg::Image::data()
445{
446 return m_data;
447}
448
449// 获取该Image对象在CDR键相关序列化时的最大尺寸(以字节为单位)。
450// 这里忽略传入的当前对齐参数(current_alignment),直接返回之前定义好的该类型的最大CDR键相关序列化类型大小(通过宏定义sensor_msgs_msg_Image_max_key_cdr_typesize获取)。
451// 此函数可能用于在某些特定场景下提前预估键相关序列化所需要的最大空间情况。
458
459// 判断该Image对象的键(Key)是否已被定义,这里直接返回false,表示默认情况下该图像对象的键未被定义。
460// 在更复杂的应用场景中,如果存在键相关概念用于标识、检索等操作,可根据实际情况修改该函数逻辑来准确反映键的定义状态。
462{
463 return false;
464}
465
466// 用于对该Image对象执行键相关的序列化操作,不过当前函数实现中只是将传入的CDR对象(eprosima::fastcdr::Cdr& scdr)进行了忽略(通过(void) scdr语句),意味着可能暂时没有实际的键序列化逻辑。
467// 在实际应用中,如果有键相关的序列化需求,需要按照具体的序列化规则和数据格式在此函数内填充相应代码,将图像对象中与键相关的数据正确序列化到给定的CDR对象中。
469 eprosima::fastcdr::Cdr& scdr) const
470{
471 (void) scdr;
472}
#define sensor_msgs_msg_Image_max_key_cdr_typesize
Definition Image.cpp:47
#define sensor_msgs_msg_Image_max_cdr_typesize
Definition Image.cpp:41
return current_alignment initial_alignment
This class represents the structure Image defined by the user in the IDL file.这个类表示在 IDL(接口定义语言)文件中由用...
static eProsima_user_DllExport size_t getMaxCdrSerializedSize(size_t current_alignment=0)
Definition Image.cpp:172
eProsima_user_DllExport void serialize(eprosima::fastcdr::Cdr &cdr) const
Definition Image.cpp:207
eProsima_user_DllExport bool operator!=(const Image &x) const
Definition Image.cpp:165
eProsima_user_DllExport const std_msgs::msg::Header & header() const
此函数返回成员变量 header 的常量引用
Definition Image.cpp:259
eProsima_user_DllExport void deserialize(eprosima::fastcdr::Cdr &cdr)
Definition Image.cpp:220
static eProsima_user_DllExport size_t getCdrSerializedSize(const sensor_msgs::msg::Image &data, size_t current_alignment=0)
Definition Image.cpp:180
static eProsima_user_DllExport bool isKeyDefined()
Definition Image.cpp:461
eProsima_user_DllExport const std::vector< uint8_t > & data() const
Definition Image.cpp:434
std::vector< uint8_t > m_data
eProsima_user_DllExport void encoding(const std::string &_encoding)
此函数复制成员变量 encoding 的值
Definition Image.cpp:341
eProsima_user_DllExport bool operator==(const Image &x) const
Definition Image.cpp:158
eProsima_user_DllExport const std::string & encoding() const
This function returns a constant reference to member encoding
Definition Image.cpp:364
eProsima_user_DllExport uint32_t height() const
此函数返回成员变量 height 的值
Definition Image.cpp:290
eProsima_user_DllExport Image & operator=(const Image &x)
Definition Image.cpp:114
eProsima_user_DllExport ~Image()
Definition Image.cpp:69
eProsima_user_DllExport void header(const std_msgs::msg::Header &_header)
此函数复制成员变量 header 的值
Definition Image.cpp:237
static eProsima_user_DllExport size_t getKeyMaxCdrSerializedSize(size_t current_alignment=0)
Definition Image.cpp:452
eProsima_user_DllExport uint32_t width() const
此函数返回成员变量 width 的值
Definition Image.cpp:321
eProsima_user_DllExport Image()
Definition Image.cpp:51
std_msgs::msg::Header m_header
*eProsima_user_DllExport void data(const std::vector< uint8_t > &_data)
Definition Image.cpp:416
eProsima_user_DllExport uint32_t step() const
Definition Image.cpp:402
eProsima_user_DllExport uint8_t is_bigendian() const
Definition Image.cpp:383
eProsima_user_DllExport void serializeKey(eprosima::fastcdr::Cdr &cdr) const
Definition Image.cpp:468