libxr 1.0
Want to be the best embedded framework
Loading...
Searching...
No Matches
LibXR::Stack< Data > Class Template Reference

线程安全的栈数据结构 / Thread-safe stack data structure More...

#include <stack.hpp>

Collaboration diagram for LibXR::Stack< Data >:

Public Member Functions

 Stack (uint32_t depth)
 栈的构造函数 / Stack constructor
 
Dataoperator[] (int32_t index)
 获取指定索引的元素 / Retrieves the element at a specified index
 
uint32_t Size () const
 获取栈中当前元素数量 / Returns the number of elements currently in the stack
 
uint32_t EmptySize () const
 获取栈的剩余可用空间 / Returns the remaining available space in the stack
 
ErrorCode Push (const Data &data)
 向栈中推入数据 / Pushes data onto the stack
 
ErrorCode Pop (Data &data)
 从栈中弹出数据 / Pops data from the stack
 
ErrorCode Pop ()
 从栈中弹出数据(不返回数据) / Pops data from the stack (without returning data)
 
ErrorCode Peek (Data &data)
 获取栈顶数据但不弹出 / Retrieves the top data of the stack without popping
 
ErrorCode Insert (const Data &data, uint32_t index)
 在指定位置插入数据 / Inserts data at a specified position
 
ErrorCode Delete (uint32_t index)
 删除指定位置的数据 / Deletes data at a specified position
 
void Reset ()
 重置栈 / Resets the stack
 

Private Attributes

Datastack_
 栈存储数组 / Stack storage array
 
uint32_t top_ = 0
 当前栈顶索引 / Current top index of the stack
 
uint32_t depth_
 栈的最大容量 / Maximum capacity of the stack
 
LibXR::Mutex mutex_
 互斥锁,确保线程安全 / Mutex to ensure thread safety
 

Detailed Description

template<typename Data>
class LibXR::Stack< Data >

线程安全的栈数据结构 / Thread-safe stack data structure

该类实现了一个基于数组的线程安全栈,支持基本的 PushPopPeek 等操作,并使用互斥锁 (Mutex) 保护数据安全。 This class implements a thread-safe stack based on an array, supporting basic operations such as Push, Pop, and Peek, with mutex (Mutex) protection to ensure data safety.

Template Parameters
Data栈中存储的数据类型 / The type of data stored in the stack

Definition at line 20 of file stack.hpp.

Constructor & Destructor Documentation

◆ Stack()

template<typename Data >
LibXR::Stack< Data >::Stack ( uint32_t  depth)
inline

栈的构造函数 / Stack constructor

Parameters
depth栈的最大容量 / Maximum capacity of the stack

Definition at line 33 of file stack.hpp.

33: stack_(new Data[depth]), depth_(depth) {}
uint32_t depth_
栈的最大容量 / Maximum capacity of the stack
Definition stack.hpp:25
Data * stack_
栈存储数组 / Stack storage array
Definition stack.hpp:23
constexpr auto min(T1 a, T2 b) -> typename std::common_type< T1, T2 >::type
计算两个数的最小值

Member Function Documentation

◆ Delete()

template<typename Data >
ErrorCode LibXR::Stack< Data >::Delete ( uint32_t  index)
inline

删除指定位置的数据 / Deletes data at a specified position

Parameters
index要删除的索引位置 / Index of the data to be deleted
Returns
操作结果,成功返回 ErrorCode::OK,索引超出范围返回 ErrorCode::OUT_OF_RANGE / Operation result: returns ErrorCode::OK on success, ErrorCode::OUT_OF_RANGE if the index is out of range

Definition at line 195 of file stack.hpp.

196 {
197 mutex_.Lock();
198 if (index >= top_)
199 {
200 mutex_.Unlock();
201 return ErrorCode::OUT_OF_RANGE;
202 }
203
204 for (uint32_t i = index; i < top_ - 1; i++)
205 {
206 stack_[i] = stack_[i + 1];
207 }
208 top_--;
209 mutex_.Unlock();
210 return ErrorCode::OK;
211 }
ErrorCode Lock()
加锁,如果锁已被占用,则阻塞等待 (Lock the mutex, blocking if it is already locked).
Definition mutex.cpp:13
void Unlock()
解锁互斥锁 (Unlock the mutex).
Definition mutex.cpp:27
uint32_t top_
当前栈顶索引 / Current top index of the stack
Definition stack.hpp:24
LibXR::Mutex mutex_
互斥锁,确保线程安全 / Mutex to ensure thread safety
Definition stack.hpp:26

◆ EmptySize()

template<typename Data >
uint32_t LibXR::Stack< Data >::EmptySize ( ) const
inline

获取栈的剩余可用空间 / Returns the remaining available space in the stack

Definition at line 63 of file stack.hpp.

63{ return (depth_ - top_); }

◆ Insert()

template<typename Data >
ErrorCode LibXR::Stack< Data >::Insert ( const Data data,
uint32_t  index 
)
inline

在指定位置插入数据 / Inserts data at a specified position

Parameters
data要插入的数据 / The data to be inserted
index插入位置索引 / Index at which the data is inserted
Returns
操作结果,成功返回 ErrorCode::OK,栈满返回 ErrorCode::FULL,索引超出范围返回 ErrorCode::OUT_OF_RANGE / Operation result: returns ErrorCode::OK on success, ErrorCode::FULL if the stack is full, ErrorCode::OUT_OF_RANGE if the index is out of range

Definition at line 160 of file stack.hpp.

161 {
162 mutex_.Lock();
163 if (top_ >= depth_)
164 {
165 mutex_.Unlock();
166 return ErrorCode::FULL;
167 }
168
169 if (index > top_)
170 {
171 mutex_.Unlock();
172 return ErrorCode::OUT_OF_RANGE;
173 }
174
175 for (uint32_t i = top_ + 1; i > index; i--)
176 {
177 stack_[i] = stack_[i - 1];
178 }
179
180 stack_[index] = data;
181 top_++;
182
183 mutex_.Unlock();
184
185 return ErrorCode::OK;
186 }

◆ operator[]()

template<typename Data >
Data & LibXR::Stack< Data >::operator[] ( int32_t  index)
inline

获取指定索引的元素 / Retrieves the element at a specified index

Parameters
index元素索引,支持负索引(从栈顶向下索引) / Element index, supports negative indexing (relative to the top)
Returns
该索引位置的元素 / The element at the given index

Definition at line 41 of file stack.hpp.

42 {
43 if (index >= 0)
44 {
45 ASSERT(static_cast<uint32_t>(index) < depth_);
46 return stack_[index];
47 }
48 else
49 {
50 ASSERT(static_cast<int32_t>(depth_) + index >= 0);
51 return stack_[top_ + index];
52 }
53 }

◆ Peek()

template<typename Data >
ErrorCode LibXR::Stack< Data >::Peek ( Data data)
inline

获取栈顶数据但不弹出 / Retrieves the top data of the stack without popping

Parameters
data用于存储栈顶数据 / Variable to store the retrieved data
Returns
操作结果,成功返回 ErrorCode::OK,栈为空返回 ErrorCode::EMPTY / Operation result: returns ErrorCode::OK on success, ErrorCode::EMPTY if the stack is empty

Definition at line 135 of file stack.hpp.

136 {
137 mutex_.Lock();
138
139 if (top_ == 0)
140 {
141 mutex_.Unlock();
142
143 return ErrorCode::EMPTY;
144 }
145 data = stack_[top_ - 1];
146 mutex_.Unlock();
147
148 return ErrorCode::OK;
149 }

◆ Pop() [1/2]

template<typename Data >
ErrorCode LibXR::Stack< Data >::Pop ( )
inline

从栈中弹出数据(不返回数据) / Pops data from the stack (without returning data)

Returns
操作结果,成功返回 ErrorCode::OK,栈为空返回 ErrorCode::EMPTY / Operation result: returns ErrorCode::OK on success, ErrorCode::EMPTY if the stack is empty

Definition at line 114 of file stack.hpp.

115 {
116 mutex_.Lock();
117
118 if (top_ == 0)
119 {
120 mutex_.Unlock();
121 return ErrorCode::EMPTY;
122 }
123 --top_;
124 mutex_.Unlock();
125 return ErrorCode::OK;
126 }

◆ Pop() [2/2]

template<typename Data >
ErrorCode LibXR::Stack< Data >::Pop ( Data data)
inline

从栈中弹出数据 / Pops data from the stack

Parameters
data用于存储弹出的数据 / Variable to store the popped data
Returns
操作结果,成功返回 ErrorCode::OK,栈为空返回 ErrorCode::EMPTY / Operation result: returns ErrorCode::OK on success, ErrorCode::EMPTY if the stack is empty

Definition at line 93 of file stack.hpp.

94 {
95 mutex_.Lock();
96
97 if (top_ == 0)
98 {
99 mutex_.Unlock();
100 return ErrorCode::EMPTY;
101 }
102 data = stack_[--top_];
103 mutex_.Unlock();
104 return ErrorCode::OK;
105 }

◆ Push()

template<typename Data >
ErrorCode LibXR::Stack< Data >::Push ( const Data data)
inline

向栈中推入数据 / Pushes data onto the stack

Parameters
data要推入的元素 / The element to be pushed
Returns
操作结果,成功返回 ErrorCode::OK,栈满返回 ErrorCode::FULL / Operation result: returns ErrorCode::OK on success, ErrorCode::FULL if the stack is full

Definition at line 72 of file stack.hpp.

73 {
74 mutex_.Lock();
75
76 if (top_ >= depth_)
77 {
78 mutex_.Unlock();
79 return ErrorCode::FULL;
80 }
81 stack_[top_++] = data;
82 mutex_.Unlock();
83 return ErrorCode::OK;
84 }

◆ Reset()

template<typename Data >
void LibXR::Stack< Data >::Reset ( )
inline

重置栈 / Resets the stack

该方法清空栈,并将 top_ 归零。 This method clears the stack and resets top_ to zero.

Definition at line 219 of file stack.hpp.

220 {
221 mutex_.Lock();
222 top_ = 0;
223 mutex_.Unlock();
224 }

◆ Size()

template<typename Data >
uint32_t LibXR::Stack< Data >::Size ( ) const
inline

获取栈中当前元素数量 / Returns the number of elements currently in the stack

Definition at line 58 of file stack.hpp.

58{ return top_; }

Field Documentation

◆ depth_

template<typename Data >
uint32_t LibXR::Stack< Data >::depth_
private

栈的最大容量 / Maximum capacity of the stack

Definition at line 25 of file stack.hpp.

◆ mutex_

template<typename Data >
LibXR::Mutex LibXR::Stack< Data >::mutex_
private

互斥锁,确保线程安全 / Mutex to ensure thread safety

Definition at line 26 of file stack.hpp.

◆ stack_

template<typename Data >
Data* LibXR::Stack< Data >::stack_
private

栈存储数组 / Stack storage array

Definition at line 23 of file stack.hpp.

◆ top_

template<typename Data >
uint32_t LibXR::Stack< Data >::top_ = 0
private

当前栈顶索引 / Current top index of the stack

Definition at line 24 of file stack.hpp.


The documentation for this class was generated from the following file: