summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--makefile2
-rw-r--r--src/error.h12
-rw-r--r--src/util/vec.c53
-rw-r--r--src/util/vec.h21
4 files changed, 43 insertions, 45 deletions
diff --git a/makefile b/makefile
index 76ee33e..bca34d8 100644
--- a/makefile
+++ b/makefile
@@ -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