6#include "libxr_assert.hpp"
7#include "libxr_def.hpp"
59 template <
typename Data>
83 template <
typename... Args>
84 explicit Node(Args&&... args)
110 Data& operator*() noexcept {
return data_; }
111 operator Data&()
noexcept {
return data_; }
143 uint32_t
Size() noexcept;
160 template <typename Data, typename Func, SizeLimitMode LimitMode = SizeLimitMode::MORE>
163 for (
auto pos =
head_.
next_.load(std::memory_order_acquire); pos != &
head_;
164 pos = pos->
next_.load(std::memory_order_relaxed))
166 Assert::SizeLimitCheck<LimitMode>(sizeof(Data), pos->size_);
167 if (auto res = func(static_cast<Node<Data>*>(pos)->data_); res != ErrorCode::OK)
172 return ErrorCode::OK;
链表基础节点,所有节点都继承自该类。 Base node for the linked list, serving as a parent for all nodes.
BaseNode(size_t size)
构造 BaseNode 并设置节点大小。 Constructs a BaseNode and sets its size.
size_t size_
当前节点的数据大小(字节)。 Size of the current node (in bytes).
~BaseNode()
析构函数,确保节点不会在列表中残留。 Destructor ensuring the node does not remain in the list.
std::atomic< BaseNode * > next_
指向下一个节点的原子指针。 Atomic pointer to the next node.
数据节点模板,继承自 BaseNode,用于存储具体数据类型。 Template data node that inherits from BaseNode to store specific data...
Node()
默认构造函数,初始化节点大小。 Default constructor initializing the node size.
Data data_
存储的数据。 The stored data.
Node & operator=(const Data &data)
赋值运算符重载,允许直接对节点赋值。 Overloaded assignment operator for assigning values to the node.
Node(Args &&... args)
通过参数列表构造节点 (Constructor initializing a node using arguments list).
Node(const Data &data)
使用数据值构造 Node 节点。 Constructs a Node with the given data value.
Data * operator->() noexcept
操作符重载,提供数据访问接口。 Operator overloads providing access to the data.
链表实现,用于存储和管理数据节点。 A linked list implementation for storing and managing data nodes.
LockFreeList() noexcept
默认构造函数,初始化链表头节点。 Default constructor initializing the linked list head node.
ErrorCode Foreach(Func func)
遍历链表中的每个节点,并应用回调函数。 Iterates over each node in the list and applies a callback function.
void Add(BaseNode &data)
向链表添加一个节点。 Adds a node to the linked list.
BaseNode head_
链表头节点。 The head node of the list.
uint32_t Size() noexcept
获取链表中的节点数量。 Gets the number of nodes in the linked list.