CARLA
 
载入中...
搜索中...
未找到
BufferPool.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/Buffer.h" // 包含 Buffer 头文件,定义 Buffer 类
10
11#if defined(__clang__) // 检查是否使用 Clang 编译器
12# pragma clang diagnostic push // 保存当前的编译警告状态
13# pragma clang diagnostic ignored "-Wold-style-cast" // 忽略旧风格的类型转换警告
14#endif
15#include "moodycamel/ConcurrentQueue.h" // 包含 moodycamel 的并发队列实现
16#if defined(__clang__) // 再次检查是否使用 Clang 编译器
17# pragma clang diagnostic pop // 恢复之前保存的编译警告状态
18#endif
19
20#include <memory> // 包含内存管理相关的头文件
21
22namespace carla {
23
24 /// 一个缓冲区池。 从这个池中弹出的缓冲区在销毁时会自动返回到池中,
25 /// 这样分配的内存可以被重用。
26 /// @warning 缓冲区仅通过增长来调整其大小,除非明确地清除它们,否则不会缩小。
27 /// 分配的内存在此池被销毁时才会被删除。
28
29 class BufferPool : public std::enable_shared_from_this<BufferPool> { // 定义 BufferPool 类,支持共享指针
30 public:
31
32 BufferPool() = default; // 默认构造函数
33
34 explicit BufferPool(size_t estimated_size) : _queue(estimated_size) {} // 带参数的构造函数,初始化队列大小
35
36 /// 从队列中弹出一个缓冲区,如果队列为空,则创建一个新的缓冲区。
38 Buffer item; // 创建一个 Buffer 实例
39 _queue.try_dequeue(item); // 尝试从队列中弹出,失败则不处理
40#if __cplusplus >= 201703L // 检查是否支持 C++17
41 item._parent_pool = weak_from_this(); // 设置父池为弱引用
42#else
43 item._parent_pool = shared_from_this(); // 设置父池为共享引用
44#endif
45 return item; // 返回弹出的 Buffer
46 }
47
48 private:
49
50 friend class Buffer; // 允许 Buffer 类访问私有成员
51
52 void Push(Buffer &&buffer) { // 定义 Push 方法,接受一个右值引用的 Buffer
53 _queue.enqueue(std::move(buffer)); // 将 Buffer 移动到队列中
54 }
55
56 moodycamel::ConcurrentQueue<Buffer> _queue; // 定义并发队列用于存储 Buffer
57 };
58
59} // namespace carla
一个缓冲区池。 从这个池中弹出的缓冲区在销毁时会自动返回到池中, 这样分配的内存可以被重用。
Definition BufferPool.h:29
Buffer Pop()
从队列中弹出一个缓冲区,如果队列为空,则创建一个新的缓冲区。
Definition BufferPool.h:37
BufferPool(size_t estimated_size)
Definition BufferPool.h:34
BufferPool()=default
void Push(Buffer &&buffer)
Definition BufferPool.h:52
moodycamel::ConcurrentQueue< Buffer > _queue
Definition BufferPool.h:56
一块原始数据。 请注意,如果需要更多容量,则会分配一个新的内存块,并 删除旧的内存块。这意味着默认情况下,缓冲区只能增长。要释放内存,使用 clear 或 pop。
std::weak_ptr< BufferPool > _parent_pool
CARLA模拟器的主命名空间。
Definition Carla.cpp:139