diff options
| -rw-r--r-- | makefile | 2 | ||||
| -rw-r--r-- | src/error.h | 12 | ||||
| -rw-r--r-- | src/util/vec.c | 53 | ||||
| -rw-r--r-- | src/util/vec.h | 21 |
4 files changed, 43 insertions, 45 deletions
@@ -1,6 +1,6 @@ CC := gcc -CFLAGS := -Wall -MMD -MP -std=c99 +CFLAGS := -Wall -MMD -MP -std=c99 -DNDEBUG LFLAGS := -lSDL3 -lGL # ============================================================================== diff --git a/src/error.h b/src/error.h new file mode 100644 index 0000000..37e715b --- /dev/null +++ b/src/error.h @@ -0,0 +1,12 @@ +#ifndef LEO_ERROR_H +#define LEO_ERROR_H + +typedef enum { + LEO_Error_Ok = 0, + LEO_Error_AllocationFailure, + LEO_Error_NullPointer, + LEO_Error_ValueError, + LEO_Error_OutOfBounds, +} LEO_Error; + +#endif diff --git a/src/util/vec.c b/src/util/vec.c index ff4aebb..a07f350 100644 --- a/src/util/vec.c +++ b/src/util/vec.c @@ -1,35 +1,34 @@ +#include <assert.h> #include <stddef.h> #include <string.h> #include "vec.h" #include "alloc.h" -static LEO_Vec_Error LEO_Vec_grow(LEO_Vec *vec) +static LEO_Error LEO_Vec_grow(LEO_Vec *vec) { size_t new_capacity = vec->capacity * LEO_Vec_GROWTH_FACTOR_NUMER / LEO_Vec_GROWTH_FACTOR_DENOM; if (new_capacity <= vec->capacity) - return LEO_Vec_TOO_BIG; + return LEO_Error_AllocationFailure; vec->capacity = new_capacity; vec->data = vec->allocator.realloc(vec->data, vec->capacity * vec->item_size); if (vec->data == NULL) - return LEO_Vec_ALLOCATION_FAILURE; + return LEO_Error_AllocationFailure; - return LEO_Vec_OK; + return LEO_Error_Ok; } -LEO_Vec_Error LEO_Vec_init(LEO_Vec *vec, size_t item_size, +LEO_Error LEO_Vec_init(LEO_Vec *vec, size_t item_size, LEO_Allocator allocator) { - if (vec == NULL) - return LEO_Vec_NULL_VEC_POINTER; - if (item_size == 0) - return LEO_Vec_INVALID_ITEM_SIZE; + assert(vec != NULL); + assert(item_size != 0); vec->allocator = allocator; vec->item_size = item_size; @@ -38,9 +37,9 @@ LEO_Vec_Error LEO_Vec_init(LEO_Vec *vec, size_t item_size, vec->data = vec->allocator.alloc(vec->capacity * vec->item_size); if (!vec->data) - return LEO_Vec_ALLOCATION_FAILURE; + return LEO_Error_AllocationFailure; - return LEO_Vec_OK; + return LEO_Error_Ok; } void LEO_Vec_free(LEO_Vec *vec) @@ -52,47 +51,43 @@ void LEO_Vec_free(LEO_Vec *vec) vec->data = NULL; } -LEO_Vec_Error LEO_Vec_push(LEO_Vec *vec, const void *item) +LEO_Error LEO_Vec_push(LEO_Vec *vec, const void *item) { - if (vec == NULL) - return LEO_Vec_NULL_VEC_POINTER; - if (item == NULL) - return LEO_Vec_NULL_ITEM_POINTER; + assert(vec != NULL); + assert(item != NULL); if (vec->length >= vec->capacity) { - LEO_Vec_Error result = LEO_Vec_grow(vec); - if (result != LEO_Vec_OK) + LEO_Error result = LEO_Vec_grow(vec); + if (result != LEO_Error_Ok) return result; } unsigned char *dest = (unsigned char *)vec->data + (vec->length++) * vec->item_size; memcpy(dest, item, vec->item_size); - return LEO_Vec_OK; + return LEO_Error_Ok; } -LEO_Vec_Error LEO_Vec_pop(LEO_Vec *vec, void *item) +LEO_Error LEO_Vec_pop(LEO_Vec *vec, void *item) { - if (vec == NULL) - return LEO_Vec_NULL_VEC_POINTER; + assert(vec != NULL); if (vec->length == 0) - return LEO_Vec_OUT_OF_BOUNDS; + return LEO_Error_OutOfBounds; void *src = vec->data + (vec->length--) * vec->item_size; memcpy(item, src, vec->item_size); - return LEO_Vec_OK; + return LEO_Error_Ok; } -LEO_Vec_Error LEO_Vec_get(LEO_Vec *vec, size_t i, void *item) +LEO_Error LEO_Vec_get(LEO_Vec *vec, size_t i, void *item) { - if (vec == NULL) - return LEO_Vec_NULL_VEC_POINTER; + assert(vec != NULL); if (i >= vec->length) - return LEO_Vec_OUT_OF_BOUNDS; + return LEO_Error_OutOfBounds; unsigned char *src = (unsigned char *) vec->data + i * vec->item_size; memcpy(item, src, vec->item_size); - return LEO_Vec_OK; + return LEO_Error_Ok; } diff --git a/src/util/vec.h b/src/util/vec.h index 5524947..889b649 100644 --- a/src/util/vec.h +++ b/src/util/vec.h @@ -3,6 +3,7 @@ #include <stddef.h> +#include "../error.h" #include "alloc.h" static const size_t LEO_Vec_GROWTH_FACTOR_NUMER = 3; @@ -17,22 +18,12 @@ typedef struct { size_t capacity; } LEO_Vec; -typedef enum { - LEO_Vec_OK = 0, - LEO_Vec_NULL_VEC_POINTER = 1, - LEO_Vec_NULL_ITEM_POINTER = 2, - LEO_Vec_INVALID_ITEM_SIZE = 3, - LEO_Vec_ALLOCATION_FAILURE = 4, - LEO_Vec_TOO_BIG = 5, - LEO_Vec_OUT_OF_BOUNDS = 6, -} LEO_Vec_Error; - -LEO_Vec_Error LEO_Vec_init (LEO_Vec *vec, size_t item_size, +LEO_Error LEO_Vec_init (LEO_Vec *vec, size_t item_size, LEO_Allocator allocator); -void LEO_Vec_free (LEO_Vec *vec); -LEO_Vec_Error LEO_Vec_push (LEO_Vec *vec, const void *item); -LEO_Vec_Error LEO_Vec_pop (LEO_Vec *vec, void *item); -LEO_Vec_Error LEO_Vec_get (LEO_Vec *vec, size_t i, void *item); +void LEO_Vec_free (LEO_Vec *vec); +LEO_Error LEO_Vec_push (LEO_Vec *vec, const void *item); +LEO_Error LEO_Vec_pop (LEO_Vec *vec, void *item); +LEO_Error LEO_Vec_get (LEO_Vec *vec, size_t i, void *item); #endif |
