Queue.h 1.1 KB

12345678910111213141516171819202122232425262728293031
  1. #ifndef CORE_QUEUE_H
  2. #define CORE_QUEUE_H
  3. #include "core/Types.h"
  4. struct CoreQueueT {
  5. size_t writeIndex;
  6. size_t readIndex;
  7. size_t length;
  8. size_t capacity;
  9. size_t dataSize;
  10. void* data;
  11. };
  12. typedef struct CoreQueueT CoreQueue;
  13. void coreInitQueue(CoreQueue* r, size_t capacity, size_t dataSize);
  14. void coreDestroyQueue(CoreQueue* r);
  15. void coreQueueAddPointer(CoreQueue* r, const void* data);
  16. #define coreQueueAdd(l, type, ...) coreQueueAddPointer(l, &(type){__VA_ARGS__})
  17. void* coreQueueGetVoidPointer(const CoreQueue* r, size_t index);
  18. #define coreQueueGetPointer(r, index, type) \
  19. ((type*)coreQueueGetVoidPointer(r, index))
  20. #define coreQueueGet(r, index, type) (*coreQueueGetPointer(r, index, type))
  21. const void* coreQueueGetVoidPointerC(const CoreQueue* r, size_t index);
  22. #define coreQueueGetPointerC(r, index, type) \
  23. ((const type*)coreQueueGetVoidPointerC(r, index))
  24. #define coreQueueGetC(r, index, type) (*coreQueueGetPointerC(r, index, type))
  25. void coreClearQueue(CoreQueue* r);
  26. void coreQueueRemove(CoreQueue* r);
  27. #endif