QUEUE_LIB Embedded C library v1.0.0
Data Structures | Enumerations | Functions
queue.h File Reference

Deterministic, generic FIFO queue for embedded / safety-critical systems. More...

#include <stdint.h>
#include <stdbool.h>
Include dependency graph for queue.h:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Data Structures

struct  queue_t
 FIFO queue control structure. More...
 

Enumerations

enum  queue_status_t { QUEUE_OK = 0U , QUEUE_FULL = 1U , QUEUE_EMPTY = 2U , QUEUE_ERROR = 3U }
 Queue operation status codes. More...
 

Functions

queue_status_t queue_init (queue_t *q, void *buffer, uint16_t element_size, uint16_t capacity)
 Initialize a queue. More...
 
queue_status_t queue_push (queue_t *q, const void *item)
 Push an element into the queue. More...
 
queue_status_t queue_pop (queue_t *q, void *item)
 Pop an element from the queue. More...
 
bool queue_is_empty (const queue_t *q)
 Check whether queue is empty. More...
 
bool queue_is_full (const queue_t *q)
 Check whether queue is full. More...
 

Detailed Description

Deterministic, generic FIFO queue for embedded / safety-critical systems.

Author
niwciu (niwci.nosp@m.u@gm.nosp@m.ail.c.nosp@m.om)
Version
1.0.2
Date
2025-10-26

Queue interface designed to be MISRA-C:2012 aware and suitable for safety-critical applications (ISO 26262). Implementation uses a user-supplied raw data buffer (void *) to support multiple element types.

MISRA Deviation: DV-QUEUE-001 (Rule 11.4) Justified cast from void* to uint8_t* for byte-level memory operations.

Note
Caller is responsible for ensuring the provided buffer size is at least: (element_size * capacity) bytes, properly aligned for the element type.
Internal helper function copy_bytes(uint8_t*, const uint8_t*, uint16_t) is exercised indirectly via unit tests in group DV_QUEUE_001 to cover all branches, including NULL pointer cases and edge conditions.

Enumeration Type Documentation

◆ queue_status_t

Queue operation status codes.

Enumerator
QUEUE_OK 

Operation completed successfully.

QUEUE_FULL 

Queue is full; push operation failed.

QUEUE_EMPTY 

Queue is empty; pop operation failed.

QUEUE_ERROR 

General error (invalid parameters, etc.).

Function Documentation

◆ queue_init()

queue_status_t queue_init ( queue_t q,
void *  buffer,
uint16_t  element_size,
uint16_t  capacity 
)

Initialize a queue.

Parameters
[in,out]qPointer to queue control structure.
[in]bufferPointer to storage buffer.
[in]element_sizeElement size in bytes (>0).
[in]capacityNumber of elements (>0).
Return values
QUEUE_OKSuccessful initialization.
QUEUE_ERRORInvalid parameters.

◆ queue_is_empty()

bool queue_is_empty ( const queue_t q)

Check whether queue is empty.

Parameters
[in]qPointer to queue instance.
Returns
true if empty, false otherwise.

◆ queue_is_full()

bool queue_is_full ( const queue_t q)

Check whether queue is full.

Parameters
[in]qPointer to queue instance.
Returns
true if full, false otherwise.

◆ queue_pop()

queue_status_t queue_pop ( queue_t q,
void *  item 
)

Pop an element from the queue.

Parameters
[in,out]qPointer to queue instance.
[out]itemPointer to destination buffer.
Return values
QUEUE_OKSuccess.
QUEUE_EMPTYQueue empty.
QUEUE_ERRORInvalid parameters.
Here is the call graph for this function:

◆ queue_push()

queue_status_t queue_push ( queue_t q,
const void *  item 
)

Push an element into the queue.

Parameters
[in,out]qPointer to queue instance.
[in]itemPointer to data to add (element_size bytes).
Return values
QUEUE_OKSuccess.
QUEUE_FULLQueue full.
QUEUE_ERRORInvalid parameters.
Here is the call graph for this function: