1#include "write_port.hpp"
15 if (owns_port_ && buffered_size_ > 0)
17 UNUSED(SubmitBuffered());
38 DEV_ASSERT(port_->queue_info_ !=
nullptr);
39 DEV_ASSERT(port_->queue_data_ !=
nullptr);
41 if (!port_->Writable())
48 std::memory_order_acq_rel,
49 std::memory_order_acquire))
54 if (port_->queue_info_->EmptySize() < 1)
61 batch_capacity_ = port_->queue_data_->EmptySize();
72 if (data.
addr_ ==
nullptr)
77 auto lock_result = Acquire();
83 auto ans = port_->queue_data_->PushBatch(
reinterpret_cast<const uint8_t*
>(data.
addr_),
87 buffered_size_ += data.
size_;
95 ASSERT(buffered_size_ > 0);
97 if (op_.type == WriteOperation::OperationType::BLOCK)
105 auto ans = port_->queue_info_->Push(
109 ans = port_->CommitWrite({
nullptr, buffered_size_}, op_,
true);
112 if (op_.type == WriteOperation::OperationType::BLOCK)
151 if (owns_port_ && buffered_size_ > 0)
153 ans = SubmitBuffered();
154 if (op_.type == WriteOperation::OperationType::BLOCK)
只读原始数据视图 / Immutable raw data view
size_t size_
数据字节数 / Data size in bytes
const void * addr_
数据起始地址 / Data start address
ErrorCode SubmitBuffered()
将当前已缓存批次提交给 WritePort。
ErrorCode Acquire()
为当前流批次获取一次可写入的端口所有权。
ErrorCode Commit()
手动提交已写入的数据到队列,并释放当前锁。
void Release()
将当前批次的端口所有权归还给 WritePort。
~Stream()
析构时自动提交已累积的数据并释放锁。
ErrorCode Write(ConstRawData data)
追加一个原始数据片段到当前流批次。
Stream(LibXR::WritePort *port, LibXR::WriteOperation op)
构造流写入对象,并尝试锁定端口。
Stream & operator<<(const ConstRawData &data)
追加写入数据的语法糖,忽略返回状态并支持链式调用。
WritePort class for handling write operations.
size_t EmptySize()
获取数据队列的剩余可用空间。 Gets the remaining available space in the data queue.
@ LOCKED
Submission path owns queue mutation. 提交路径占有写队列/元数据修改权。
@ PTR_NULL
空指针 | Null pointer
@ NOT_SUPPORT
不支持 | Not supported
@ OK
操作成功 | Operation successful