CARLA
 
载入中...
搜索中...
未找到
BufferView.h
浏览该文件的文档.
1// Copyright (c) 2023 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
10#include "carla/Buffer.h"// 包含 Carla 项目中定义的 Buffer 类或相关功能的头文件
11#include "carla/Debug.h"// 包含 Carla 项目中用于调试目的的工具或宏的头文件
12#include "carla/Exception.h"//包含 Carla 项目中自定义异常类的头文件
13#include "carla/Logging.h"// 包含 Carla 项目中日志记录功能的头文件
14
15#include <boost/asio/buffer.hpp>//包含 Boost.Asio 库中关于缓冲区操作的头文件
16
17#include <cstdint>//包含标准库中定义的固定宽度整数类型
18#include <limits>//包含标准库中定义的数值极限相关的模板类
19#include <memory>//包含标准库中定义的智能指针类
20#include <type_traits>//包含标准库中定义的类型特征模板
21
22#ifdef LIBCARLA_INCLUDED_FROM_UE4
24#include "Containers/Array.h"
26#endif // LIBCARLA_INCLUDED_FROM_UE4
27
28namespace carla {
29
30 class BufferPool;
31
32 /// 从现有缓冲区创建一个常量视图
33 class BufferView : public std::enable_shared_from_this<BufferView> {
34
35 // =========================================================================
36 /// @name Member types
37 // =========================================================================
38 /// @{
39
40 public:
41 // 缓冲区中值的类型
42 using value_type = unsigned char;
43 // 缓冲区大小的类型
44 using size_type = uint32_t;
45 // 常量迭代器类型
46 using const_iterator = const value_type *;
47
48 /// @}
49 // =========================================================================
50 /// @name Construction and destruction
51 // =========================================================================
52 /// @{
53
54 public:
55
56 BufferView() = delete;
57 BufferView(const BufferView &) = delete;
58
59 // 从一个临时缓冲区创建一个BufferView的智能指针
60 static std::shared_ptr<BufferView> CreateFrom(Buffer &&buffer) {
61 return std::shared_ptr<BufferView>(new BufferView(std::move(buffer)));
62 }
63
64 private:
65
66 // 私有构造函数,接收一个临时缓冲区
67 BufferView(Buffer &&rhs) noexcept
68 : _buffer(std::move(rhs)) {}
69
70 /// @}
71 // =========================================================================
72 /// @name Data access
73 // =========================================================================
74 /// @{
75
76 public:
77
78 // 访问位置@a i的字节
79 const value_type &operator[](size_t i) const {
80 return _buffer.data()[i];
81 }
82
83 // 直接访问分配的内存,如果没有分配内存则返回nullptrv
84 const value_type *data() const noexcept {
85 return _buffer.data();
86 }
87
88 // 将此缓冲区转换为boost::asio::buffer
89 ///
90 /// @warning Boost.Asio缓冲区不拥有数据,调用者必须确保在asio缓冲区不再使用之前不要删除这块内存
91 boost::asio::const_buffer cbuffer() const noexcept {
92 return {_buffer.data(), _buffer.size()};
93 }
94
95 /// @copydoc cbuffer()
96 boost::asio::const_buffer buffer() const noexcept {
97 return cbuffer();
98 }
99
100 /// @}
101 // =========================================================================
102 /// @name Capacity
103 // =========================================================================
104 /// @{
105
106 public:
107 // 检查容器是否为空,并返回结果。
108 // 如果_buffer中没有元素,则返回true,表示容器为空;否则返回false。
109 bool empty() const noexcept {
110 return _buffer.size() == 0u;
111 }
112 // 返回容器中当前存储的元素数量。
113 // 这个值表示容器内实际的元素个数。
114 size_type size() const noexcept {
115 return _buffer.size();
116 }
117 // 返回容器能存储的最大元素数量。
118 // 这是一个静态函数,返回size_type能表示的最大值,通常代表理论最大容量。
119 static constexpr size_type max_size() noexcept {
120 return (std::numeric_limits<size_type>::max)();
121 }
122 // 返回容器当前分配的存储空间大小,即容量。
123 // 这个值表示在不进行内存重新分配的情况下,容器能存储的元素数量。
124 size_type capacity() const noexcept {
125 return _buffer.capacity();
126 }
127
128 /// @}
129 // =========================================================================
130 /// @name Iterators
131 // =========================================================================
132 /// @{
133
134 public:
135 // 返回指向容器开始的常量迭代器。
136 // 这个迭代器不能用于修改容器中的元素,只能用于读取。
137 const_iterator cbegin() const noexcept {
138 return _buffer.data();
139 }
140 // 返回指向容器开始的常量迭代器。
141 // 这个迭代器不能用于修改容器中的元素,只能用于读取。
142 const_iterator begin() const noexcept {
143 return _buffer.cbegin();
144 }
145 // 返回指向容器末尾的常量迭代器。
146 // 这个迭代器指向容器中最后一个元素的下一个位置,表示容器的逻辑结束。
147 const_iterator cend() const noexcept {
148 return _buffer.cbegin() + _buffer.size();
149 }
150 // 返回指向容器末尾的常量迭代器。
151 // 这个迭代器指向容器中最后一个元素的下一个位置,表示容器的逻辑结束。
152 const_iterator end() const noexcept {
153 return _buffer.cend();
154 }
155
156 private:
157
158 // 用于存储数据的缓冲区
160 };
161
162 // BufferView的共享智能指针
163 using SharedBufferView = std::shared_ptr<BufferView>;
164
165} // namespace carla
从现有缓冲区创建一个常量视图
Definition BufferView.h:33
BufferView(Buffer &&rhs) noexcept
Definition BufferView.h:67
static constexpr size_type max_size() noexcept
Definition BufferView.h:119
const_iterator cend() const noexcept
Definition BufferView.h:147
size_type size() const noexcept
Definition BufferView.h:114
uint32_t size_type
Definition BufferView.h:44
static std::shared_ptr< BufferView > CreateFrom(Buffer &&buffer)
Definition BufferView.h:60
const value_type * const_iterator
Definition BufferView.h:46
BufferView(const BufferView &)=delete
const value_type & operator[](size_t i) const
Definition BufferView.h:79
const_iterator begin() const noexcept
Definition BufferView.h:142
const Buffer _buffer
Definition BufferView.h:159
size_type capacity() const noexcept
Definition BufferView.h:124
boost::asio::const_buffer cbuffer() const noexcept
Definition BufferView.h:91
const_iterator cbegin() const noexcept
Definition BufferView.h:137
bool empty() const noexcept
Definition BufferView.h:109
boost::asio::const_buffer buffer() const noexcept
Definition BufferView.h:96
const value_type * data() const noexcept
Definition BufferView.h:84
const_iterator end() const noexcept
Definition BufferView.h:152
unsigned char value_type
Definition BufferView.h:42
一块原始数据。 请注意,如果需要更多容量,则会分配一个新的内存块,并 删除旧的内存块。这意味着默认情况下,缓冲区只能增长。要释放内存,使用 clear 或 pop。
const value_type * data() const noexcept
直接访问分配的内存,如果没有分配内存则返回 nullptr。
size_type size() const noexcept
const_iterator cend() const noexcept
size_type capacity() const noexcept
const_iterator cbegin() const noexcept
CARLA模拟器的主命名空间。
Definition Carla.cpp:139
std::shared_ptr< BufferView > SharedBufferView
Definition BufferView.h:163