6 : buffer_(capacity), input_closed_(
false), output_closed_(
false) {}
9 if (
len == 0)
return 0;
10 roo::unique_lock<roo::mutex>
lock(mutex_);
11 while (buffer_.
full() && !output_closed_) {
14 if (input_closed_ || output_closed_) {
17 not_empty_.notify_all();
34 roo::unique_lock<roo::mutex>
lock(mutex_);
35 return output_closed_ || input_closed_ ? 0 : buffer_.
free();
39 if (
len == 0)
return 0;
40 roo::unique_lock<roo::mutex>
lock(mutex_);
41 if (buffer_.
full() || input_closed_ || output_closed_) {
44 not_empty_.notify_all();
49 if (
len == 0)
return 0;
50 roo::unique_lock<roo::mutex>
lock(mutex_);
51 while (buffer_.
empty()) {
52 if (input_closed_ || output_closed_)
return 0;
53 not_empty_.wait(
lock);
58 not_full_.notify_all();
63 roo::unique_lock<roo::mutex>
lock(mutex_);
64 return buffer_.
used();
68 if (
len == 0)
return 0;
69 roo::unique_lock<roo::mutex>
lock(mutex_);
70 if (buffer_.
empty()) {
73 not_full_.notify_all();
78 roo::unique_lock<roo::mutex>
lock(mutex_);
82 if (output_closed_ && buffer_.
empty()) {
89 roo::unique_lock<roo::mutex>
lock(mutex_);
100 roo::unique_lock<roo::mutex>
lock(mutex_);
101 input_closed_ =
true;
104 not_full_.notify_all();
105 not_empty_.notify_all();
109 roo::unique_lock<roo::mutex>
lock(mutex_);
110 output_closed_ =
true;
112 not_full_.notify_all();
113 not_empty_.notify_all();
size_t write(const byte *data, size_t len)
size_t write(const byte *data, size_t len)
size_t tryRead(byte *data, size_t len)
size_t tryWrite(const byte *data, size_t len)
Status inputStatus() const
Status outputStatus() const
size_t availableForRead()
size_t read(byte *data, size_t len)
RingPipe(size_t capacity)
size_t availableForWrite()
size_t writeFully(const byte *data, size_t len)
roo::basic_string_view< CharT, Traits > basic_string_view