CQueue
Queue handling library (written in plain c)
Install / Use
/learn @SMFSW/CQueueREADME
cQueue
Queue handling library (written in plain c)
This library is designed for a c implementation on embedded devices, yet may be compiled without change with gcc for other purposes/targets. Designed as a library to be compatible with Arduino LibManager specifications (yet rather use Queue instead - https://github.com/SMFSW/Queue).
Usage
- Initialize a Queue using
q_init(Queue_t * pQ, size_t size_rec, uint16_t nb_recs, QueueType type, bool overwrite):pQ- pointer to the queue structsize_rec- size of a record in the queuenb_recs- number of records in the queuetype- queue implementation type:FIFO,LIFOoverwrite- overwrite previous records when queue is full if set totrue
- OR a statically allocated Queue using
q_init_static(Queue_t * pQ, size_t size_rec, uint16_t nb_recs, QueueType type, bool overwrite, void * pQDat, size_t lenQDat):pQ- pointer to the queue structsize_rec- size of a record in the queuenb_recs- number of records in the queuetype- queue implementation type:FIFO,LIFOoverwrite- overwrite previous records when queue is full if set totruepQDat- pointer to static data queuelenQDat- length of static data queue (in bytes)
- Push stuff to the queue using
q_push(Queue_t * pQ, void * rec)- returns
trueif successfully pushed into queue - returns
falseis queue is full
- returns
- Pop stuff from the queue using
q_pop(Queue_t * pQ, void * rec)orq_pull(Queue_t * pQ, void * rec)- returns
trueif successfully popped from queue - returns
falseif queue is empty
- returns
- Peek stuff from the queue using
q_peek(Queue_t * pQ, void * rec)- returns
trueif successfully peeked from queue - returns
falseif queue is empty
- returns
- Drop stuff from the queue using
q_drop(Queue_t * pQ)- returns
trueif successfully dropped from queue - returns
falseif queue is empty
- returns
- Peek stuff at index from the queue using
q_peekIdx(Queue_t * pQ, void * rec, uint16_t idx)- returns
trueif successfully peeked from queue - returns
falseif index is out of range - warning: no associated drop function, not to use with
q_drop
- returns
- Peek latest stored from the queue using
q_peekPrevious(Queue_t * pQ, void * rec)- returns
trueif successfully peeked from queue - returns
falseif queue is empty - warning: no associated drop function, not to use with
q_drop - note: only useful with FIFO implementation, use
q_peekinstead with a LIFO
- returns
- Other methods:
q_isInitialized(Queue_t * pQ):trueif initialized properly,falseotherwiseq_isEmpty(Queue_t * pQ):trueif empty,falseotherwiseq_isFull(Queue_t * pQ):trueif full,falseotherwiseq_sizeof(Queue_t * pQ): queue size in bytes (returns 0 in case queue allocation failed)q_getCount(Queue_t * pQ)orq_nbRecs(Queue_t * pQ): number of records stored in the queueq_getRemainingCount(Queue_t * pQ): number of records left in the queueq_clean(Queue_t * pQ)orq_flush(Queue_t * pQ): remove all items in the queue
Notes
- Interrupt safe automation is not implemented in the library. You have to manually disable/enable interrupts where required.
No implementation will be made as it would be an issue when using
peek/dropmethods with LIFO implementation: if an item is put to the queue through interrupt betweenpeekanddropcalls, thedropcall would drop the wrong (newer) item. In this particular case, dropping decision must be made before re-enabling interrupts.
Examples included
- SimpleQueue.ino: Simple queue example (both LIFO FIFO implementations can be tested)
- SimpleQueueStatic.ino: Simple queue example using static queue data array (both LIFO FIFO implementations can be tested)
- PointersQueue.ino: Queue of function pointers performing queued actions
- QueueDuplicates.ino: Simple test to test queue duplicates before pushing to queue
- QueueIdxPeeking.ino: Simple test to test queue index picking
- RolloverTest.ino: Simple test to test queue rollover (for lib testing purposes mainly)
- LibTst.ino: flexible test (for lib testing purposes mainly)
See also
Queue - Cpp implementation of this library
Related Skills
node-connect
344.4kDiagnose OpenClaw node connection and pairing failures for Android, iOS, and macOS companion apps
frontend-design
99.2kCreate distinctive, production-grade frontend interfaces with high design quality. Use this skill when the user asks to build web components, pages, or applications. Generates creative, polished code that avoids generic AI aesthetics.
openai-whisper-api
344.4kTranscribe audio via OpenAI Audio Transcriptions API (Whisper).
qqbot-media
344.4kQQBot 富媒体收发能力。使用 <qqmedia> 标签,系统根据文件扩展名自动识别类型(图片/语音/视频/文件)。
