16 Semaphore read_sem, write_sem;
17 ReadOperation op(read_sem);
19 term->write_op_ = WriteOperation(write_sem, 10);
23 term->request_read_size_ =
LibXR::min(term->read_port_->Size(), READ_BUFF_SIZE);
24 auto buffer = RawData(term->read_buff_, term->request_read_size_);
26 if ((*term->read_port_)(buffer, op) == ErrorCode::OK && term->request_read_size_ > 0)
28 term->write_mutex_->Lock();
30 (void)term->write_stream_.Commit();
31 term->write_mutex_->Unlock();
47 ReadOperation op(term->read_status_);
49 auto start_read = [&]()
51 term->request_read_size_ =
53 auto buffer = RawData(term->read_buff_, term->request_read_size_);
54 (*term->read_port_)(buffer, op);
59 const auto status = term->read_status_.load(std::memory_order_acquire);
62 case ReadOperation::OperationPollingStatus::READY:
64 term->request_read_size_ =
66 auto buffer = RawData(term->read_buff_, term->request_read_size_);
67 (*term->read_port_)(buffer, op);
70 case ReadOperation::OperationPollingStatus::RUNNING:
72 case ReadOperation::OperationPollingStatus::DONE:
74 term->write_mutex_->Lock();
75 auto buffer = RawData(term->read_buff_, term->request_read_size_);
77 (void)term->write_stream_.Commit();
78 term->write_mutex_->Unlock();
82 case ReadOperation::OperationPollingStatus::ERROR:
constexpr auto min(LeftType a, RightType b) -> std::common_type_t< LeftType, RightType >
计算两个数的最小值 / Computes the minimum of two numbers
constexpr auto max(LeftType a, RightType b) -> std::common_type_t< LeftType, RightType >
计算两个数的最大值 / Computes the maximum of two numbers