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 >:
[legend]

Public Member Functions

 Stack (uint32_t depth)
 栈的构造函数 / Stack constructor
 
Data & operator[] (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

Data * stack_
 栈存储数组 / 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 22 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 35 of file stack.hpp.

35: stack_(new Data[depth]), depth_(depth) {}
uint32_t depth_
栈的最大容量 / Maximum capacity of the stack
Definition stack.hpp:27
Data * stack_
栈存储数组 / Stack storage array
Definition stack.hpp:25

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 194 of file stack.hpp.

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

◆ EmptySize()

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

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

Definition at line 65 of file stack.hpp.

65{ 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 162 of file stack.hpp.

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

◆ 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 43 of file stack.hpp.

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

◆ 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 137 of file stack.hpp.

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

◆ 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 116 of file stack.hpp.

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

◆ 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 95 of file stack.hpp.

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

◆ 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 74 of file stack.hpp.

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

◆ 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 218 of file stack.hpp.

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

◆ Size()

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

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

Definition at line 60 of file stack.hpp.

60{ return top_; }

Field Documentation

◆ depth_

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

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

Definition at line 27 of file stack.hpp.

◆ mutex_

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

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

Definition at line 28 of file stack.hpp.

◆ stack_

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

栈存储数组 / Stack storage array

Definition at line 25 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 26 of file stack.hpp.


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