123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778 |
- #include "core/RingBuffer.h"
- #include <assert.h>
- #include <stdio.h>
- #include <string.h>
- #include "core/Utility.h"
- void coreDestroyRingBuffer(CoreRingBuffer* r) {
- coreClearRingBuffer(r);
- r->dataSize = 0;
- r->capacity = 0;
- coreFree(r->data);
- r->data = nullptr;
- }
- static void* getPointer(CoreRingBuffer* r, size_t index) {
- return (char*)r->data + r->dataSize * index;
- }
- CoreRingBuffer* coreRingBufferAddPointer(CoreRingBuffer* r, const void* data) {
- if(r->length >= r->capacity) {
- return nullptr;
- } else if(r->data == nullptr) {
- r->data = coreAllocate(r->capacity * r->dataSize);
- }
- memcpy(getPointer(r, r->writeIndex), data, r->dataSize);
- r->writeIndex = (r->writeIndex + 1) % r->capacity;
- r->length++;
- return r;
- }
- void* coreRingBufferGetVoidPointer(CoreRingBuffer* r, size_t index) {
- return getPointer(r, (index + r->readIndex) % r->capacity);
- }
- const void* coreRingBufferGetVoidPointerC(const CoreRingBuffer* r,
- size_t index) {
- return (char*)r->data +
- r->dataSize * ((index + r->readIndex) % r->capacity);
- }
- void coreClearRingBuffer(CoreRingBuffer* r) {
- r->writeIndex = 0;
- r->readIndex = 0;
- r->length = 0;
- }
- void coreRingBufferRemove(CoreRingBuffer* r) {
- assert(r->length > 0);
- r->length--;
- r->readIndex = (r->readIndex + 1) % r->capacity;
- }
- size_t coreToStringRingBuffer(CoreRingBuffer* r, char* buffer, size_t n,
- CoreToString c) {
- size_t w = 0;
- coreStringAddI(&w, &buffer, &n, snprintf(buffer, n, "["));
- size_t end = r->length;
- if(end > 0) {
- end--;
- for(size_t i = 0; i < end; i++) {
- coreStringAdd(&w, &buffer, &n,
- c(coreRingBufferGetVoidPointer(r, i), buffer, n));
- coreStringAddI(&w, &buffer, &n, snprintf(buffer, n, ", "));
- }
- coreStringAdd(&w, &buffer, &n,
- c(coreRingBufferGetVoidPointer(r, end), buffer, n));
- }
- coreStringAddI(&w, &buffer, &n, snprintf(buffer, n, "]"));
- return w;
- }
- void coreSwapRingBuffer(CoreRingBuffer* a, CoreRingBuffer* b) {
- CoreRingBuffer tmp = *a;
- *a = *b;
- *b = tmp;
- }
|