CARLA
 
载入中...
搜索中...
未找到
detail/Stream.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 的定义
10#include "carla/Debug.h" // 包含调试相关的定义
11#include "carla/streaming/Token.h" // 包含 Token 的定义
12
13#include <memory> // 包含智能指针支持
14
15namespace carla { // 定义 carla 命名空间
16namespace streaming { // 定义 streaming 子命名空间
17namespace detail { // 定义 detail 子命名空间
18
19 class Dispatcher; // 前向声明 Dispatcher 类
20
21 template <typename StreamStateT> // 模板类,类型参数为 StreamStateT
22 class Stream { // 定义 Stream 类
23 public:
24
25 Stream() = delete; // 删除默认构造函数
26
27 Stream(const Stream &) = default; // 默认拷贝构造函数
28 Stream(Stream &&) = default; // 默认移动构造函数
29
30 Stream &operator=(const Stream &) = default; // 默认拷贝赋值运算符
31 Stream &operator=(Stream &&) = default; // 默认移动赋值运算符
32
33 /// 与此流关联的 Token。客户端可使用该 Token 订阅此流。
34 Token token() const { // 获取流的 Token
35 return _shared_state->token(); // 返回共享状态中的 Token
36 }
37
38 /// 从与此流关联的缓冲池中获取一个缓冲区。被丢弃的缓冲区将被重用以避免内存分配。
39 ///
40 /// @note 重用缓冲区针对所有通过流发送的消息都是大且(大致上)相同大小的用例进行了优化。
41 Buffer MakeBuffer() { // 创建缓冲区
42 auto state = _shared_state; // 获取共享状态
43 return state->MakeBuffer(); // 返回从共享状态创建的缓冲区
44 }
45
46 /// 将 @a buffers 刷新到流中。不会进行复制。
47 template <typename... Buffers> // 支持多个缓冲区类型
48 void Write(Buffers &&... buffers) { // 写入缓冲区
49 _shared_state->Write(std::move(buffers)...); // 调用共享状态的写入方法
50 }
51
52 /// 复制 @a data 并将其刷新到流中。
53 template <typename T> // 类型模板
54 Stream &operator<<(const T &data) { // 重载输出运算符
55 auto buffer = MakeBuffer(); // 创建一个缓冲区
56 buffer.copy_from(data); // 从数据复制内容到缓冲区
57 Write(std::move(buffer)); // 将缓冲区写入流
58 return *this; // 返回当前对象
59 }
60
61 /// 检查是否有客户端正在监听
62 bool AreClientsListening() { // 判断客户端是否在监听
63 return _shared_state ? _shared_state->AreClientsListening() : false; // 返回共享状态的监听状态
64 }
65
66 private:
67
68 friend class detail::Dispatcher; // 声明 Dispatcher 为友元类,允许其访问私有成员
69
70 Stream(std::shared_ptr<StreamStateT> state) // 带参数的构造函数
71 : _shared_state(std::move(state)) { // 初始化共享状态
72 DEBUG_ASSERT(_shared_state != nullptr); // 调试断言,确保共享状态不为空
73 }
74
75 std::shared_ptr<StreamStateT> _shared_state; // 共享状态指针
76 };
77
78} // namespace detail
79} // namespace streaming
80} // namespace carla
#define DEBUG_ASSERT(predicate)
Definition Debug.h:68
一块原始数据。 请注意,如果需要更多容量,则会分配一个新的内存块,并 删除旧的内存块。这意味着默认情况下,缓冲区只能增长。要释放内存,使用 clear 或 pop。
Keeps the mapping between streams and sessions.
Definition Dispatcher.h:30
Stream & operator<<(const T &data)
复制 data 并将其刷新到流中。
Token token() const
与此流关联的 Token。客户端可使用该 Token 订阅此流。
Stream & operator=(const Stream &)=default
Stream(std::shared_ptr< StreamStateT > state)
bool AreClientsListening()
检查是否有客户端正在监听
std::shared_ptr< StreamStateT > _shared_state
void Write(Buffers &&... buffers)
将 buffers 刷新到流中。不会进行复制。
Stream & operator=(Stream &&)=default
Buffer MakeBuffer()
从与此流关联的缓冲池中获取一个缓冲区。被丢弃的缓冲区将被重用以避免内存分配。
Stream(const Stream &)=default
CARLA模拟器的主命名空间。
Definition Carla.cpp:139