From ccb0161f18beb9b0c21331cf65f2291e09b1ce92 Mon Sep 17 00:00:00 2001 From: sfja Date: Wed, 19 Mar 2025 21:43:13 +0100 Subject: [PATCH] refactor extract static queue --- backend/src/collections/collection.h | 80 ------------------------ backend/src/collections/static_queue.h | 85 ++++++++++++++++++++++++++ backend/src/http/client_connection.h | 2 +- backend/src/util/attrs.h | 3 + 4 files changed, 89 insertions(+), 81 deletions(-) create mode 100644 backend/src/collections/static_queue.h create mode 100644 backend/src/util/attrs.h diff --git a/backend/src/collections/collection.h b/backend/src/collections/collection.h index 7aa0c14..5d8697f 100644 --- a/backend/src/collections/collection.h +++ b/backend/src/collections/collection.h @@ -90,83 +90,3 @@ #define DEFINE_VEC(TYPE, VEC_TYPE, FN_PREFIX) \ DECLARE_VEC_TYPE(TYPE, VEC_TYPE, FN_PREFIX, MAYBE_UNUSED static inline) \ DEFINE_VEC_IMPL(TYPE, VEC_TYPE, FN_PREFIX, MAYBE_UNUSED static inline) - -#define DEFINE_STATIC_QUEUE(TYPE, QUEUE_TYPE, FN_PREFIX) \ - typedef struct { \ - TYPE* data; \ - size_t capacity; \ - size_t back; \ - size_t front; \ - } QUEUE_TYPE; \ - \ - MAYBE_UNUSED static inline int FN_PREFIX##_construct( \ - QUEUE_TYPE* queue, size_t capacity) \ - { \ - *queue = (QUEUE_TYPE) { \ - .data = malloc(sizeof(TYPE) * capacity), \ - .capacity = capacity, \ - .back = 0, \ - .front = 0, \ - }; \ - return 0; \ - } \ - \ - MAYBE_UNUSED static inline void FN_PREFIX##_destroy(QUEUE_TYPE* queue) \ - { \ - free(queue->data); \ - } \ - \ - MAYBE_UNUSED static inline QUEUE_TYPE* FN_PREFIX##_new(size_t capacity) \ - { \ - QUEUE_TYPE* queue = malloc(sizeof(QUEUE_TYPE)); \ - if (!queue) \ - return NULL; \ - int res = FN_PREFIX##_construct(queue, capacity); \ - if (res != 0) \ - return NULL; \ - return queue; \ - } \ - \ - MAYBE_UNUSED static inline void FN_PREFIX##_free(QUEUE_TYPE* queue) \ - { \ - FN_PREFIX##_destroy(queue); \ - free(queue); \ - } \ - \ - MAYBE_UNUSED static inline int FN_PREFIX##_push( \ - QUEUE_TYPE* queue, TYPE req) \ - { \ - size_t front = queue->front + 1; \ - if (front >= queue->capacity) { \ - front = 0; \ - } \ - if (front == queue->back) { \ - return -1; \ - } \ - queue->data[queue->front] = req; \ - queue->front = front; \ - return 0; \ - } \ - \ - MAYBE_UNUSED static inline size_t FN_PREFIX##_size( \ - const QUEUE_TYPE* queue) \ - { \ - return queue->front >= queue->back \ - ? queue->front - queue->back \ - : (queue->capacity - queue->back) + queue->front; \ - } \ - \ - MAYBE_UNUSED static inline int FN_PREFIX##_pop( \ - QUEUE_TYPE* queue, TYPE* req) \ - { \ - if (queue->back == queue->front) { \ - return -1; \ - } \ - *req = queue->data[queue->back]; \ - size_t back = queue->back + 1; \ - if (back >= queue->capacity) { \ - back = 0; \ - } \ - queue->back = back; \ - return 0; \ - } diff --git a/backend/src/collections/static_queue.h b/backend/src/collections/static_queue.h new file mode 100644 index 0000000..7d47772 --- /dev/null +++ b/backend/src/collections/static_queue.h @@ -0,0 +1,85 @@ +#pragma once + +#include "../util/attrs.h" +#include +#include + +#define DEFINE_STATIC_QUEUE(TYPE, QUEUE_TYPE, FN_PREFIX) \ + typedef struct { \ + TYPE* data; \ + size_t capacity; \ + size_t back; \ + size_t front; \ + } QUEUE_TYPE; \ + \ + MAYBE_UNUSED static inline int FN_PREFIX##_construct( \ + QUEUE_TYPE* queue, size_t capacity) \ + { \ + *queue = (QUEUE_TYPE) { \ + .data = malloc(sizeof(TYPE) * capacity), \ + .capacity = capacity, \ + .back = 0, \ + .front = 0, \ + }; \ + return 0; \ + } \ + \ + MAYBE_UNUSED static inline void FN_PREFIX##_destroy(QUEUE_TYPE* queue) \ + { \ + free(queue->data); \ + } \ + \ + MAYBE_UNUSED static inline QUEUE_TYPE* FN_PREFIX##_new(size_t capacity) \ + { \ + QUEUE_TYPE* queue = malloc(sizeof(QUEUE_TYPE)); \ + if (!queue) \ + return NULL; \ + int res = FN_PREFIX##_construct(queue, capacity); \ + if (res != 0) \ + return NULL; \ + return queue; \ + } \ + \ + MAYBE_UNUSED static inline void FN_PREFIX##_free(QUEUE_TYPE* queue) \ + { \ + FN_PREFIX##_destroy(queue); \ + free(queue); \ + } \ + \ + MAYBE_UNUSED static inline int FN_PREFIX##_push( \ + QUEUE_TYPE* queue, TYPE req) \ + { \ + size_t front = queue->front + 1; \ + if (front >= queue->capacity) { \ + front = 0; \ + } \ + if (front == queue->back) { \ + return -1; \ + } \ + queue->data[queue->front] = req; \ + queue->front = front; \ + return 0; \ + } \ + \ + MAYBE_UNUSED static inline size_t FN_PREFIX##_size( \ + const QUEUE_TYPE* queue) \ + { \ + return queue->front >= queue->back \ + ? queue->front - queue->back \ + : (queue->capacity - queue->back) + queue->front; \ + } \ + \ + MAYBE_UNUSED static inline int FN_PREFIX##_pop( \ + QUEUE_TYPE* queue, TYPE* req) \ + { \ + if (queue->back == queue->front) { \ + return -1; \ + } \ + *req = queue->data[queue->back]; \ + size_t back = queue->back + 1; \ + if (back >= queue->capacity) { \ + back = 0; \ + } \ + queue->back = back; \ + return 0; \ + } diff --git a/backend/src/http/client_connection.h b/backend/src/http/client_connection.h index 8acfe62..3933b43 100644 --- a/backend/src/http/client_connection.h +++ b/backend/src/http/client_connection.h @@ -1,6 +1,6 @@ #pragma once -#include "../collections/collection.h" +#include "../collections/static_queue.h" #include #include diff --git a/backend/src/util/attrs.h b/backend/src/util/attrs.h new file mode 100644 index 0000000..90057c4 --- /dev/null +++ b/backend/src/util/attrs.h @@ -0,0 +1,3 @@ +#pragma once + +#define MAYBE_UNUSED __attribute__((unused))