#include #include "queue.h" queue_t *queue_malloc(uint16_t element_size, uint16_t length) { return (queue_t*)malloc(sizeof(queue_t) + element_size * length); } void queue_init(queue_t* queue, uint16_t element_size, uint16_t length) { queue->curr_write_ptr = 0; queue->curr_read_ptr = 0; queue->element_size = element_size; queue->length = length; queue->space = length; } bool queue_enqueue(queue_t *queue, void *element) { if (queue->space == 0) { return false; } for (uint16_t i = 0; i < queue->element_size; i++) { queue->elements[queue->curr_write_ptr + i] = *(uint8_t*)(element + i); } queue->space--; queue->curr_write_ptr += queue->element_size; queue->curr_write_ptr %= queue->length * queue->element_size; return true; } void *queue_dequeue(queue_t *queue) { void* element = queue_peek(queue); if (element != NULL) { queue->curr_read_ptr += queue->element_size; queue->curr_read_ptr %= queue->length * queue->element_size; queue->space++; } return element; } void *queue_peek(queue_t *queue) { if (queue->space == queue->length) { return NULL; } return &queue->elements[queue->curr_read_ptr]; }