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
14#ifndef VL_ASYNC_QUEUE_H
15#define VL_ASYNC_QUEUE_H
16
17#include "vl_async_pool.h"
18#include "vl_atomic.h"
19#include "vl_atomic_ptr.h"
20
42typedef struct
43{
45 vl_async_pool elements;
46
48 vl_atomic_ptr head;
49
51 vl_atomic_ptr tail;
52
54 vl_atomic_uint32_t size;
55
57 vl_uint16_t elementSize;
58} vl_async_queue;
59
76VL_API void vlAsyncQueueInit(vl_async_queue* queue, vl_uint16_t elementSize);
77
94VL_API void vlAsyncQueueFree(vl_async_queue* queue);
95
113VL_API vl_async_queue* vlAsyncQueueNew(vl_uint16_t elementSize);
114
131VL_API void vlAsyncQueueDelete(vl_async_queue* queue);
132
142VL_API void vlAsyncQueueClear(vl_async_queue* queue);
143
152VL_API void vlAsyncQueueReset(vl_async_queue* queue);
153
172VL_API void vlAsyncQueuePushBack(vl_async_queue* queue, const void* value);
173
194VL_API vl_bool_t vlAsyncQueuePopFront(vl_async_queue* queue, void* result);
195
203static inline vl_uint32_t vlAsyncQueueSize(const vl_async_queue* queue) { return vlAtomicLoad(&queue->size); }
204
205#endif // VL_ASYNC_QUEUE_H
VL_API void vlAsyncQueuePushBack(vl_async_queue *queue, const void *value)
Pushes a new element to the end of the queue.
Definition vl_async_queue.c:69
VL_API void vlAsyncQueueDelete(vl_async_queue *queue)
Deletes a heap-allocated queue created with vlAsyncQueueNew.
Definition vl_async_queue.c:49
VL_API void vlAsyncQueueClear(vl_async_queue *queue)
Clears the queue content and resets it to its initial dummy-node state.
Definition vl_async_queue.c:55
VL_API void vlAsyncQueueFree(vl_async_queue *queue)
Frees resources held by the queue but does not deallocate the queue structure.
Definition vl_async_queue.c:40
VL_API vl_async_queue * vlAsyncQueueNew(vl_uint16_t elementSize)
Allocates and initializes a new async queue on the heap.
Definition vl_async_queue.c:42
VL_API vl_bool_t vlAsyncQueuePopFront(vl_async_queue *queue, void *result)
Pops an element from the front of the queue.
Definition vl_async_queue.c:102
VL_API void vlAsyncQueueReset(vl_async_queue *queue)
Resets the queue, deallocating most dynamically allocated memory.
Definition vl_async_queue.c:62
VL_API 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:32
#define vlAtomicLoad(ptr)
Performs a generic atomic read operation.
Definition vl_atomic.h:181
VL_ATOMIC vl_tagged_ptr vl_atomic_ptr
Atomic variant of vl_tagged_ptr.
Definition vl_atomic_ptr.h:60
VL_BOOL_T vl_bool_t
Definition vl_numtypes.h:191