CARLA
 
载入中...
搜索中...
未找到
Array.h
浏览该文件的文档.
1// Copyright (c) 2017 Computer Vision Center (CVC) at the Universitat Autonoma
2// de Barcelona (UAB).
3//
4// This work is licensed under the terms of the MIT license.
5// For a copy, see <https://opensource.org/licenses/MIT>.
6
7#pragma once // 防止头文件被多次包含
8
9#include "carla/Debug.h" // 引入调试相关的头文件
10#include "carla/Exception.h" // 引入异常处理相关的头文件
11#include "carla/sensor/SensorData.h" // 引入传感器数据相关的头文件
12
13#include <exception> // 引入异常处理标准库
14#include <iterator> // 引入迭代器标准库
15#include <type_traits> // 引入类型特性相关的库
16
17namespace carla { // 定义命名空间 carla
18namespace sensor { // 定义命名空间 sensor
19namespace data { // 定义命名空间 data
20
21 /// 所有传感器数据的基类,包含一个项目数组。
22 template <typename T> // 模板定义,类型为 T
23 class Array : public SensorData { // Array 类继承自 SensorData
24 public:
25
26 using value_type = T; // 定义 value_type 为 T
27 using iterator = value_type *; // 定义迭代器类型为 value_type 指针
28 using const_iterator = typename std::add_const<value_type>::type *; // 定义常量迭代器类型
29 using reverse_iterator = std::reverse_iterator<iterator>; // 定义反向迭代器类型
30 using const_reverse_iterator = std::reverse_iterator<const_iterator>; // 定义常量反向迭代器类型
31 using size_type = size_t; // 定义 size_type 为 size_t
32 using pointer = value_type *; // 定义指针类型为 value_type 指针
33 using const_pointer = typename std::add_const<value_type>::type *; // 定义常量指针类型
34 using reference = value_type &; // 定义引用类型为 value_type 引用
35 using const_reference = typename std::add_const<value_type>::type &; // 定义常量引用类型
36
37 // 返回迭代器的起始位置
39 return reinterpret_cast<iterator>(_data.begin() + _offset); // 计算并返回开始迭代器
40 }
41
42 // 返回常量迭代器的起始位置
44 return reinterpret_cast<const_iterator>(_data.begin() + _offset); // 计算并返回常量开始迭代器
45 }
46
47 // 返回常量迭代器的起始位置(重载)
49 return cbegin(); // 调用 cbegin()
50 }
51
52 // 返回迭代器的结束位置
54 return reinterpret_cast<iterator>(_data.end()); // 返回结束迭代器
55 }
56
57 // 返回常量迭代器的结束位置
59 return reinterpret_cast<const_iterator>(_data.end()); // 返回常量结束迭代器
60 }
61
62 // 返回常量迭代器的结束位置(重载)
64 return cend(); // 调用 cend()
65 }
66
67 // 返回反向迭代器的起始位置
69 return reverse_iterator(begin()); // 返回反向开始迭代器
70 }
71
72 // 返回常量反向迭代器的起始位置
74 return const_reverse_iterator(cbegin()); // 返回常量反向开始迭代器
75 }
76
77 // 返回常量反向迭代器的起始位置(重载)
79 return crbegin(); // 调用 crbegin()
80 }
81
82 // 返回反向迭代器的结束位置
84 return reverse_iterator(end()); // 返回反向结束迭代器
85 }
86
87 // 返回常量反向迭代器的结束位置
89 return const_reverse_iterator(cend()); // 返回常量反向结束迭代器
90 }
91
92 // 返回常量反向迭代器的结束位置(重载)
94 return crend(); // 调用 crend()
95 }
96
97 // 检查数组是否为空
98 bool empty() const {
99 return begin() == end(); // 如果开始迭代器等于结束迭代器,则为空
100 }
101
102 // 返回数组大小
103 size_type size() const {
104 DEBUG_ASSERT(std::distance(begin(), end()) >= 0); // 确保大小非负
105 return static_cast<size_type>(std::distance(begin(), end())); // 返回元素个数
106 }
107
108 // 返回数据指针
110 return begin(); // 返回开始迭代器作为数据指针
111 }
112
113 // 返回常量数据指针
114 const value_type *data() const {
115 return begin(); // 返回开始迭代器作为常量数据指针
116 }
117
118 // 通过下标访问元素
120 return data()[pos]; // 返回指定位置的元素
121 }
122
123 // 通过下标访问常量元素
125 return data()[pos]; // 返回指定位置的常量元素
126 }
127
128 // 安全地访问元素,抛出越界异常
130 if (!(pos < size())) { // 检查索引是否越界
131 throw_exception(std::out_of_range("Array index out of range")); // 抛出越界异常
132 }
133 return operator[](pos); // 返回元素
134 }
135
136 // 安全地访问常量元素,抛出越界异常
138 if (!(pos < size())) { // 检查索引是否越界
139 throw_exception(std::out_of_range("Array index out of range")); // 抛出越界异常
140 }
141 return operator[](pos); // 返回常量元素
142 }
143
144 protected:
145
146 // 构造函数,接受原始数据和偏移量获取函数
147 template <typename FuncT>
148 explicit Array(RawData &&data, FuncT get_offset)
149 : SensorData(data), // 初始化基类
150 _data(std::move(data)), // 移动原始数据
151 _offset(get_offset(_data)) { // 获取偏移量
152 DEBUG_ASSERT(_data.size() >= _offset); // 确保偏移量不大于数据大小
153 DEBUG_ASSERT((_data.size() - _offset) % sizeof(T) == 0u); // 确保数据对齐
154 DEBUG_ASSERT(begin() <= end()); // 确保开始迭代器不大于结束迭代器
155 }
156
157 // 构造函数,接受偏移量和原始数据
158 explicit Array(size_t offset, RawData &&data)
159 : Array(std::move(data), [offset](const RawData &) { return offset; }) {} // 调用上一个构造函数
160
161 // 获取原始数据
162 const RawData &GetRawData() const {
163 return _data; // 返回原始数据
164 }
165
166 private:
167
168 RawData _data; // 存储原始数据
169
170 const size_t _offset; // 存储偏移量
171 };
172
173} // namespace data
174} // namespace sensor
175} // namespace carla
176
Traits::size_t size_t
#define DEBUG_ASSERT(predicate)
Definition Debug.h:68
包装一个传感器生成的原始数据以及一些有用的元信息。
Definition RawData.h:20
auto end() noexcept
指向传感器生成的数据的结束迭代器。
Definition RawData.h:62
auto begin() noexcept
指向传感器生成的数据的开始迭代器。
Definition RawData.h:52
size_t size() const
传感器生成的数据的字节大小。
Definition RawData.h:82
所有传感器生成数据的对象的基类
Definition SensorData.h:22
所有传感器数据的基类,包含一个项目数组。
Definition Array.h:23
const_iterator end() const
Definition Array.h:63
Array(RawData &&data, FuncT get_offset)
Definition Array.h:148
const_reference at(size_type pos) const
Definition Array.h:137
value_type * iterator
Definition Array.h:27
const value_type * data() const
Definition Array.h:114
const_iterator cbegin() const
Definition Array.h:43
typename std::add_const< value_type >::type & const_reference
Definition Array.h:35
const size_t _offset
Definition Array.h:170
bool empty() const
Definition Array.h:98
const_iterator begin() const
Definition Array.h:48
value_type * pointer
Definition Array.h:32
const_reverse_iterator crbegin() const
Definition Array.h:73
const_reverse_iterator rbegin() const
Definition Array.h:78
std::reverse_iterator< iterator > reverse_iterator
Definition Array.h:29
const_reference operator[](size_type pos) const
Definition Array.h:124
reference operator[](size_type pos)
Definition Array.h:119
typename std::add_const< value_type >::type * const_pointer
Definition Array.h:33
reverse_iterator rend()
Definition Array.h:83
const RawData & GetRawData() const
Definition Array.h:162
Array(size_t offset, RawData &&data)
Definition Array.h:158
size_type size() const
Definition Array.h:103
value_type * data()
Definition Array.h:109
typename std::add_const< value_type >::type * const_iterator
Definition Array.h:28
std::reverse_iterator< const_iterator > const_reverse_iterator
Definition Array.h:30
reference at(size_type pos)
Definition Array.h:129
value_type & reference
Definition Array.h:34
const_reverse_iterator rend() const
Definition Array.h:93
const_reverse_iterator crend() const
Definition Array.h:88
reverse_iterator rbegin()
Definition Array.h:68
const_iterator cend() const
Definition Array.h:58
CARLA模拟器的主命名空间。
Definition Carla.cpp:139
void throw_exception(const std::exception &e)
Definition Carla.cpp:142