Veritable Lasagna
An Allocator & Data Structure Library for C.
Loading...
Searching...
No Matches
vl_async_queue.h
Go to the documentation of this file.
1#ifndef VL_ASYNC_QUEUE_H
2#define VL_ASYNC_QUEUE_H
3
4#include "vl_atomic.h"
5#include "vl_atomic_ptr.h"
6#include "vl_async_pool.h"
7
28typedef struct {
31
34
37
39 vl_atomic_uint32_t size;
40
42 vl_uint16_t elementSize;
44
50void vlAsyncQueueInit(vl_async_queue* queue, vl_uint16_t elementSize);
51
57
63vl_async_queue* vlAsyncQueueNew(vl_uint16_t elementSize);
64
70
79
88
96void vlAsyncQueuePushBack(vl_async_queue* queue, const void* value);
97
106vl_bool_t vlAsyncQueuePopFront(vl_async_queue* queue, void* result);
107
115static inline vl_uint32_t vlAsyncQueueSize(const vl_async_queue* queue){
116 return vlAtomicLoad(&queue->size);
117}
118
119#endif //VL_ASYNC_QUEUE_H
A Non-Blocking Atomic (/Asynchronous) Memory Pool.
Definition vl_async_pool.h:44
vl_async_pool elements
Definition vl_async_queue.h:30
void vlAsyncQueueClear(vl_async_queue *queue)
Clears the queue content and resets it to its initial dummy-node state.
Definition vl_async_queue.c:51
vl_atomic_ptr tail
Definition vl_async_queue.h:36
void vlAsyncQueuePushBack(vl_async_queue *queue, const void *value)
Pushes a new element to the end of the queue.
Definition vl_async_queue.c:63
void vlAsyncQueueInit(vl_async_queue *queue, vl_uint16_t elementSize)
Initializes an async queue for elements of a specified size.
Definition vl_async_queue.c:29
vl_bool_t vlAsyncQueuePopFront(vl_async_queue *queue, void *result)
Pops an element from the front of the queue.
Definition vl_async_queue.c:90
vl_atomic_uint32_t size
Definition vl_async_queue.h:39
vl_atomic_ptr head
Definition vl_async_queue.h:33
void vlAsyncQueueDelete(vl_async_queue *queue)
Deletes a heap-allocated queue created with vlAsyncQueueNew.
Definition vl_async_queue.c:46
void vlAsyncQueueFree(vl_async_queue *queue)
Frees resources held by the queue but does not deallocate the queue structure.
Definition vl_async_queue.c:36
void vlAsyncQueueReset(vl_async_queue *queue)
Resets the queue, deallocating most dynamically allocated memory.
Definition vl_async_queue.c:57
vl_async_queue * vlAsyncQueueNew(vl_uint16_t elementSize)
Allocates and initializes a new async queue on the heap.
Definition vl_async_queue.c:40
vl_uint16_t elementSize
Definition vl_async_queue.h:42
Multi-Producer, Multi-Consumer (MPMC) Lock-Free Queue.
Definition vl_async_queue.h:28
#define vlAtomicLoad(ptr)
Performs a generic atomic read operation.
Definition vl_atomic.h:157
VL_ATOMIC vl_tagged_ptr vl_atomic_ptr
Atomic variant of vl_tagged_ptr.
Definition vl_atomic_ptr.h:28
VL_BOOL_T vl_bool_t
Definition vl_numtypes.h:128