1234567891011121314151617181920212223242526272829303132333435363738 |
- #ifndef CORE_RINGBUFFER_H
- #define CORE_RINGBUFFER_H
- #include "core/Types.h"
- typedef struct {
- size_t writeIndex;
- size_t readIndex;
- size_t length;
- size_t capacity;
- size_t dataSize;
- void* data;
- } CoreRingBuffer;
- #define CORE_RING_BUFFER(capacity, dataSize) \
- ((CoreRingBuffer){0, 0, 0, capacity, dataSize, nullptr})
- void coreDestroyRingBuffer(CoreRingBuffer* r);
- CoreRingBuffer* coreRingBufferAddPointer(CoreRingBuffer* r, const void* data);
- #define coreRingBufferAdd(l, type, ...) \
- coreRingBufferAddPointer(l, &(type){__VA_ARGS__})
- void* coreRingBufferGetVoidPointer(CoreRingBuffer* r, size_t index);
- #define coreRingBufferGetPointer(r, index, type) \
- ((type*)coreRingBufferGetVoidPointer(r, index))
- #define coreRingBufferGet(r, index, type) \
- (*coreRingBufferGetPointer(r, index, type))
- const void* coreRingBufferGetVoidPointerC(const CoreRingBuffer* r,
- size_t index);
- #define coreRingBufferGetPointerC(r, index, type) \
- ((const type*)coreRingBufferGetVoidPointerC(r, index))
- #define coreRingBufferGetC(r, index, type) \
- (*coreRingBufferGetPointerC(r, index, type))
- void coreClearRingBuffer(CoreRingBuffer* r);
- void coreRingBufferRemove(CoreRingBuffer* r);
- size_t coreToStringRingBuffer(CoreRingBuffer* r, char* buffer, size_t n,
- CoreToString c);
- void coreSwapRingBuffer(CoreRingBuffer* a, CoreRingBuffer* b);
- #endif
|