1#ifndef NEFORCE_CORE_ASYNC_CHANNEL_HPP__
2#define NEFORCE_CORE_ASYNC_CHANNEL_HPP__
15NEFORCE_BEGIN_NAMESPACE__
49 capacity_(capacity) {}
69 if (capacity_ > 0 && buffer_.size() >= capacity_) {
72 buffer_.push_back(
move(value));
84 cv_.wait(
lock, [
this] {
85 return closed_ || (capacity_ == 0 && buffer_.empty()) || (capacity_ > 0 && buffer_.size() < capacity_);
90 buffer_.push_back(
move(value));
102 if (buffer_.empty()) {
105 out =
move(buffer_.front());
118 cv_.wait(
lock, [
this] {
return closed_ || !buffer_.empty(); });
119 if (buffer_.empty()) {
122 out =
move(buffer_.front());
153 NEFORCE_NODISCARD
size_t size() const noexcept {
155 return buffer_.size();
162 NEFORCE_NODISCARD
bool empty() const noexcept {
164 return buffer_.empty();
170NEFORCE_END_NAMESPACE__
bool read(T &out)
读取消息(阻塞直到有数据或通道关闭)
bool is_closed() const noexcept
检查通道是否已关闭
channel(size_t capacity=capacity_max)
构造函数
bool try_read(T &out)
尝试读取消息(非阻塞)
bool try_write(T value)
尝试发送消息(非阻塞)
bool empty() const noexcept
检查缓冲区是否为空
bool write(T value)
发送消息(阻塞直到空间可用或通道关闭)
static constexpr size_t capacity_max
最大容量常量
size_t size() const noexcept
当前缓冲消息数量
static constexpr T max() noexcept
获取类型的最大值
constexpr Iterator2 move(Iterator1 first, Iterator1 last, Iterator2 result) noexcept(noexcept(inner::__move_aux(first, last, result)))
移动范围元素