32#include <condition_variable>
39 template <
class T,
size_t N>
47 template <
class T,
size_t N>
101 return !
static_cast<bool>(
channel_);
120 template <
class T,
size_t N = 0>
142 std::unique_lock<std::mutex> lock(
mutex_);
160 std::unique_lock<std::mutex> lock(
mutex_);
177 std::unique_lock<std::mutex> lock(
mutex_);
192 std::unique_lock<std::mutex> lock(
mutex_);
208 std::unique_lock<std::mutex> lock(
mutex_);
226 std::unique_lock<std::mutex> lock(
mutex_);
242 std::unique_lock<std::mutex> lock(
mutex_);
261 std::unique_lock<std::mutex> lock(
mutex_);
278 explicit operator bool()
const {
279 std::unique_lock<std::mutex> lock(
mutex_);
288 std::unique_lock<std::mutex> lock(channel.
mutex_);
290 channel.
r_cv_.notify_all();
291 channel.
w_cv_.notify_all();
338 std::unique_lock<std::mutex> lock(
mutex_);
355 std::unique_lock<std::mutex> lock(
mutex_);
372 std::unique_lock<std::mutex> lock(
mutex_);
389 std::unique_lock<std::mutex> lock(
mutex_);
406 std::unique_lock<std::mutex> lock(
mutex_);
409 std::unique_ptr<T> ptr(
new T(std::move(
buffer_)));
421 explicit operator bool()
const {
422 std::unique_lock<std::mutex> lock(
mutex_);
431 std::unique_lock<std::mutex> lock(channel.
mutex_);
433 channel.
r_cv_.notify_all();
434 channel.
w_cv_.notify_all();
464 template <
class T,
size_t N,
class F>
467 while (channel >> value) func(value);
468 return std::forward<F>(func);
AsyncError(const std::string &msg)
构造 ConsoleError。
Definition csexc.h:193
Channel(const Channel &)=delete
删除复制构造函数。
bool operator<<(T &&value)
向通道写入数据。
Definition channel.h:354
bool closed_
关闭标志
Definition channel.h:324
iterator end()
迭代器的 end 函数。
Definition channel.h:443
bool operator<<(const T &value)
向通道写入数据。
Definition channel.h:337
T operator*()
从通道读取数据。
Definition channel.h:388
std::condition_variable w_cv_
写 条件变量
Definition channel.h:322
bool empty_
缓冲区是否为空
Definition channel.h:323
Channel & operator=(Channel &&)=delete
删除移动赋值函数。
std::unique_ptr< T > operator->()
从通道读取数据。
Definition channel.h:405
std::mutex mutex_
互斥锁
Definition channel.h:320
std::condition_variable r_cv_
读 条件变量
Definition channel.h:321
iterator begin()
迭代器的 begin 函数。
Definition channel.h:441
Channel(Channel &&)=delete
删除移动构造函数。
bool operator>>(T &value)
从通道读取数据。
Definition channel.h:371
T buffer_
缓冲区
Definition channel.h:319
Channel & operator=(const Channel &)=delete
删除复制赋值函数。
friend void close(Channel &channel)
关闭通道。
Definition channel.h:430
ChannelIterator< T, 0 > iterator
迭代器类型。
Definition channel.h:438
环形缓冲区通道,用于线程间通信。
Definition channel.h:121
std::condition_variable r_cv_
读 条件变量
Definition channel.h:126
std::unique_ptr< T > operator->()
从通道读取数据。
Definition channel.h:260
bool operator<<(T &&value)
向通道写入数据。
Definition channel.h:159
bool operator<<(const T &value)
向通道写入数据。
Definition channel.h:141
Channel & operator=(const Channel &)=delete
删除复制赋值函数。
std::mutex mutex_
互斥锁
Definition channel.h:125
size_t read_index_
读索引
Definition channel.h:123
std::condition_variable w_cv_
写 条件变量
Definition channel.h:127
iterator end()
迭代器的 end 函数。
Definition channel.h:300
bool operator>>(T &value)
从通道读取数据。
Definition channel.h:207
size_t write_index_
写索引
Definition channel.h:124
ChannelIterator< T, N > iterator
迭代器类型。
Definition channel.h:295
bool operator<<=(const T &value)
尝试向通道写入数据。
Definition channel.h:176
bool operator>>=(T &value)
从通道尝试读取数据(非阻塞)。
Definition channel.h:225
iterator begin()
迭代器的 begin 函数。
Definition channel.h:298
Channel & operator=(Channel &&)=delete
删除移动赋值函数。
bool closed_
关闭标志
Definition channel.h:128
Channel(Channel &&)=delete
删除移动构造函数。
T buffer_[N]
缓冲区
Definition channel.h:122
friend void close(Channel &channel)
关闭通道。
Definition channel.h:287
T operator*()
从通道读取数据。
Definition channel.h:241
bool operator<<=(T &&value)
尝试向通道写入数据。
Definition channel.h:191
Channel(const Channel &)=delete
删除复制构造函数。
通道迭代器。
Definition channel.h:48
T value_type
值类型。
Definition channel.h:56
ChannelIterator operator++(int)
后置递增。
Definition channel.h:93
T & reference
引用类型。
Definition channel.h:62
std::ptrdiff_t difference_type
差异类型。
Definition channel.h:58
std::input_iterator_tag iterator_category
迭代器类别。
Definition channel.h:54
T & operator*()
解引用查询。
Definition channel.h:70
bool operator!=(const ChannelIterator &) const
比较不等。
Definition channel.h:109
T * operator->()
成员访问查询。
Definition channel.h:79
ChannelIterator & operator++()
前置递增。
Definition channel.h:86
bool operator==(const ChannelIterator &) const
比较相等。
Definition channel.h:100
T * pointer
指针类型。
Definition channel.h:60
ChannelIterator(Channel< T, N > &channel)
Definition channel.h:64
T cache_
Definition channel.h:50
Channel< T, N > & channel_
Definition channel.h:49
定义 console 库使用的自定义异常类层次结构。
F for_each(Channel< T, N > &channel, F &&func)
遍历通道中的所有元素。
Definition channel.h:465