栈(Stack)
LibXR::Stack<T> 是一个线程安全的固定容量栈数据结 构,适用于需要临时保存数据的嵌入式应用场景,例如命令记录、导航状态保存等。
核心特性
- 基于数组的顺序栈,使用
Mutex实现线程安全。 - 支持标准操作:
Push,Pop,Peek。 - 支持负索引访问(从栈顶向下)。
- 提供插入、删除、重置等扩展操作。
- 栈大小固定,构造时指定容量。
接口说明
构造函数
Stack(uint32_t depth);
- 创建固定深度的栈,动态分配内部数组。
基本操作
ErrorCode Push(const T&):推入元素。ErrorCode Pop(T&):弹出元素。ErrorCode Pop():弹出元素(忽略返回)。ErrorCode Peek(T&):查看栈顶元素。
辅助操作
uint32_t Size():获取当前元素数量。uint32_t EmptySize():剩余空间。T& operator[](int32_t index):支持负索引。ErrorCode Insert(const T&, uint32_t index):在指定位置插入。ErrorCode Delete(uint32_t index):删除指定位置元素。void Reset():清空栈。
使用示例
LibXR::Stack<int> s(8);
s.Push(1);
s.Push(2);
int value;
s.Pop(value); // value == 2
注意事项
- 本栈采用互斥锁保护,适合多线程使用,但不适用于中断上下文。
- 若对性能有极致要求,可考虑使用无锁结构代替。
- 所有索引操作需注意边界条件,负索引从栈顶向下访问。
典型应用
- 状态记录与恢复
- 嵌套结构处理
- 命令栈/导航栈