队列(Queue)
LibXR::Queue
是一个用于嵌入式系统的高效循环队列,基于固定大小的环形缓冲区实现,支持类型安全和批量操作,适用于数据流缓存、IO 缓冲等场景。
类结构
LibXR 队列分为两个层次:
BaseQueue
:底层队列类,提供基于uint8_t*
缓冲区的通用循环缓冲实现,支持插入、弹出、查看、批量操作等。Queue<T>
:模板封装类,在BaseQueue
基础上提供类型安全接口,支持负索引访问、类型转换封装。
主要特性
- 固定容量循环队列,支持队满与队空判断。
- 支持标准队列操作:
Push
,Pop
,Peek
。 - 支持批量操作:
PushBatch
,PopBatch
,PeekBatch
。 - 提供负索引访问(从尾部向前)与头尾索引访问接口。
- 支持外部或内部缓冲区分配,适配无动态内存场景。
- 支持数据覆盖、重置与容量查询等功能。
使用示例
LibXR::Queue<int> q(16);
q.Push(42);
int x;
q.Pop(x); // x == 42
注意事项
- 队列大小固定,初始化后不可动态扩展。
- 若使用默认构造方式,会自动分配缓冲区;可通过传入缓冲区实现无动态内存分配。
- 多线程环境下请结合锁使用,或选择
LockFreeQueue
替代。
接口概览
构造与销毁
Queue(size_t length)
Queue(size_t length, uint8_t* buffer)
~Queue()
插入与移除
ErrorCode Push(const T&)
ErrorCode Pop(T&)
ErrorCode Pop()
ErrorCode Peek(T&)
批量操作
PushBatch(const T* data, size_t size)
PopBatch(T* data, size_t size)
PeekBatch(T* data, size_t size)
辅助功能
int GetFirstElementIndex()
int GetLastElementIndex()
T& operator[](int32_t index)
(支持负索引)
适用场景
- 串口/UART 接收缓冲
- 任务间数据队列
- 环形缓冲数据采集
如需线程安全或中断安全,请使用 LockFreeQueue
。