RingBuffer.h 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738
  1. #ifndef CORE_RINGBUFFER_H
  2. #define CORE_RINGBUFFER_H
  3. #include "core/Types.h"
  4. typedef struct {
  5. size_t writeIndex;
  6. size_t readIndex;
  7. size_t length;
  8. size_t capacity;
  9. size_t dataSize;
  10. void* data;
  11. } CoreRingBuffer;
  12. #define CORE_RING_BUFFER(capacity, dataSize) \
  13. ((CoreRingBuffer){0, 0, 0, capacity, dataSize, nullptr})
  14. void coreDestroyRingBuffer(CoreRingBuffer* r);
  15. CoreRingBuffer* coreRingBufferAddPointer(CoreRingBuffer* r, const void* data);
  16. #define coreRingBufferAdd(l, type, ...) \
  17. coreRingBufferAddPointer(l, &(type){__VA_ARGS__})
  18. void* coreRingBufferGetVoidPointer(CoreRingBuffer* r, size_t index);
  19. #define coreRingBufferGetPointer(r, index, type) \
  20. ((type*)coreRingBufferGetVoidPointer(r, index))
  21. #define coreRingBufferGet(r, index, type) \
  22. (*coreRingBufferGetPointer(r, index, type))
  23. const void* coreRingBufferGetVoidPointerC(const CoreRingBuffer* r,
  24. size_t index);
  25. #define coreRingBufferGetPointerC(r, index, type) \
  26. ((const type*)coreRingBufferGetVoidPointerC(r, index))
  27. #define coreRingBufferGetC(r, index, type) \
  28. (*coreRingBufferGetPointerC(r, index, type))
  29. void coreClearRingBuffer(CoreRingBuffer* r);
  30. void coreRingBufferRemove(CoreRingBuffer* r);
  31. size_t coreToStringRingBuffer(CoreRingBuffer* r, char* buffer, size_t n,
  32. CoreToString c);
  33. void coreSwapRingBuffer(CoreRingBuffer* a, CoreRingBuffer* b);
  34. #endif