Veritable Lasagna
An Allocator & Data Structure Library for C.
Loading...
Searching...
No Matches
vl_deque.h
Go to the documentation of this file.
1
14#ifndef VL_DEQUE_H
15#define VL_DEQUE_H
16
17#include "vl_pool.h"
18
34typedef struct
35{
36 vl_pool nodes; // pool nodes
37 vl_dsidx_t totalElements; // total elements in the deque
38 vl_uint16_t elementSize; // size of a single element, in bytes.
39 vl_pool_idx head; // first element
40 vl_pool_idx tail; // last element
41} vl_deque;
42
64VL_API void vlDequeInit(vl_deque* deq, vl_uint16_t elementSize);
65
84VL_API void vlDequeFree(vl_deque* deq);
85
106VL_API vl_deque* vlDequeNew(vl_uint16_t elementSize);
107
127VL_API void vlDequeDelete(vl_deque* deq);
128
147VL_API void vlDequeClear(vl_deque* deq);
148
166VL_API void vlDequeReserve(vl_deque* deque, vl_dsidx_t n);
167
196VL_API vl_deque* vlDequeClone(const vl_deque* src, vl_deque* dest);
197
215static inline vl_dsidx_t vlDequeSize(vl_deque* deq) { return deq->totalElements; }
216
234VL_API void vlDequePushFront(vl_deque* deq, const void* val);
235
258VL_API int vlDequePopFront(vl_deque* deq, void* val);
259
277VL_API void vlDequePushBack(vl_deque* deq, const void* val);
278
300VL_API int vlDequePopBack(vl_deque* deq, void* val);
301
302#endif // VL_DEQUE_H
VL_API void vlDequeDelete(vl_deque *deq)
De-initializes and deletes the specified deque and its resources.
Definition vl_deque.c:43
VL_API void vlDequeReserve(vl_deque *deque, vl_dsidx_t n)
Reserves space for n-many elements in the underlying buffer of the specified deque.
Definition vl_deque.c:57
VL_API int vlDequePopFront(vl_deque *deq, void *val)
Copies and removes an element from the front of the deque.
Definition vl_deque.c:102
VL_API vl_deque * vlDequeClone(const vl_deque *src, vl_deque *dest)
Clones the specified source deque to another.
Definition vl_deque.c:59
VL_API void vlDequeFree(vl_deque *deq)
De-initializes and frees the internal resources of the specified deque.
Definition vl_deque.c:27
VL_API void vlDequePushFront(vl_deque *deq, const void *val)
Adds and copies an element to the front of the deque.
Definition vl_deque.c:73
VL_API void vlDequeInit(vl_deque *deq, vl_uint16_t elementSize)
Initializes the specified instance of vl_deque with specific element size.
Definition vl_deque.c:18
VL_API int vlDequePopBack(vl_deque *deq, void *val)
Copies and removes an element from the end of the deque.
Definition vl_deque.c:158
VL_API vl_deque * vlDequeNew(vl_uint16_t elementSize)
Allocates on the heap, initializes, and returns a new deque instance.
Definition vl_deque.c:36
VL_API void vlDequeClear(vl_deque *deq)
Clears the specified deque.
Definition vl_deque.c:49
VL_API void vlDequePushBack(vl_deque *deq, const void *val)
Adds and copies an element to the end of the deque.
Definition vl_deque.c:132
VL_STRUCTURE_INDEX_T vl_dsidx_t
Index type for data structures.
Definition vl_numtypes.h:75
VL_POOL_INDEX_T vl_pool_idx
Definition vl_pool.h:53
Fixed-size memory pool with stable indices and geometric growth.
Definition vl_pool.h:141