From 51f135b30a772c6073e04be73ea7e34f2a2dcf7d Mon Sep 17 00:00:00 2001 From: Dvir Volk Date: Thu, 14 Jul 2016 15:27:53 +0300 Subject: [PATCH] fixed inline functions --- rmutil/vector.c | 105 +++++++++++++++++++++++++----------------------- rmutil/vector.h | 18 +++++---- 2 files changed, 65 insertions(+), 58 deletions(-) diff --git a/rmutil/vector.c b/rmutil/vector.c index 1433e42..f973c2e 100644 --- a/rmutil/vector.c +++ b/rmutil/vector.c @@ -2,80 +2,85 @@ #include inline int __vector_PushPtr(Vector *v, void *elem) { - if (v->top == v->cap) { - Vector_Resize(v, v->cap ? v->cap * 2 : 1); - } + if (v->top == v->cap) { + Vector_Resize(v, v->cap ? v->cap * 2 : 1); + } - __vector_PutPtr(v, v->top++, elem); - return v->top; + __vector_PutPtr(v, v->top++, elem); + return v->top; } inline int Vector_Get(Vector *v, size_t pos, void *ptr) { - // return 0 if pos is out of bounds - if (pos >= v->top) { - return 0; - } + // return 0 if pos is out of bounds + if (pos >= v->top) { + return 0; + } - memcpy(ptr, v->data + (pos * v->elemSize), v->elemSize); - return 1; + memcpy(ptr, v->data + (pos * v->elemSize), v->elemSize); + return 1; } /* Get the element at the end of the vector, decreasing the size by one */ inline int Vector_Pop(Vector *v, void *ptr) { - if (v->top > 0) { - if (ptr != NULL) { - Vector_Get(v, v->top - 1, ptr); - } - v->top--; - return 1; + if (v->top > 0) { + if (ptr != NULL) { + Vector_Get(v, v->top - 1, ptr); } - return 0; + v->top--; + return 1; + } + return 0; } inline int __vector_PutPtr(Vector *v, size_t pos, void *elem) { - // resize if pos is out of bounds - if (pos >= v->cap) { - Vector_Resize(v, pos + 1); - } + // resize if pos is out of bounds + if (pos >= v->cap) { + Vector_Resize(v, pos + 1); + } - if (elem) { - memcpy(v->data + pos * v->elemSize, elem, v->elemSize); - } else { - memset(v->data + pos * v->elemSize, 0, v->elemSize); - } - // move the end offset to pos if we grew - if (pos > v->top) { - v->top = pos; - } - return 1; + if (elem) { + memcpy(v->data + pos * v->elemSize, elem, v->elemSize); + } else { + memset(v->data + pos * v->elemSize, 0, v->elemSize); + } + // move the end offset to pos if we grew + if (pos > v->top) { + v->top = pos; + } + return 1; } int Vector_Resize(Vector *v, size_t newcap) { - int oldcap = v->cap; - v->cap = newcap; + int oldcap = v->cap; + v->cap = newcap; - v->data = realloc(v->data, v->cap * v->elemSize); + v->data = realloc(v->data, v->cap * v->elemSize); - // If we grew: - // put all zeros at the newly realloc'd part of the vector - if (newcap > oldcap) { - int offset = oldcap * v->elemSize; - memset(v->data + offset, 0, v->cap * v->elemSize - offset); - } - return v->cap; + // If we grew: + // put all zeros at the newly realloc'd part of the vector + if (newcap > oldcap) { + int offset = oldcap * v->elemSize; + memset(v->data + offset, 0, v->cap * v->elemSize - offset); + } + return v->cap; } Vector *__newVectorSize(size_t elemSize, size_t cap) { - Vector *vec = malloc(sizeof(Vector)); - vec->data = calloc(cap, elemSize); - vec->top = 0; - vec->elemSize = elemSize; - vec->cap = cap; + Vector *vec = malloc(sizeof(Vector)); + vec->data = calloc(cap, elemSize); + vec->top = 0; + vec->elemSize = elemSize; + vec->cap = cap; - return vec; + return vec; } void Vector_Free(Vector *v) { - free(v->data); - free(v); + free(v->data); + free(v); } + +inline int Vector_Size(Vector *v) { return v->top; } + +/* return the actual capacity */ +inline int Vector_Cap(Vector *v) { return v->cap; } diff --git a/rmutil/vector.h b/rmutil/vector.h index 5d6e097..f4aa51c 100644 --- a/rmutil/vector.h +++ b/rmutil/vector.h @@ -10,10 +10,10 @@ * Works like C++ std::vector with an underlying resizable buffer */ typedef struct { - char *data; - size_t elemSize; - size_t cap; - size_t top; + char *data; + size_t elemSize; + size_t cap; + size_t top; } Vector; @@ -47,11 +47,13 @@ int Vector_Pop(Vector *v, void *ptr); * Put an element at pos. * Note: If pos is outside the vector capacity, we resize it accordingly */ -#define Vector_Put(v, pos, elem) __vector_PutPtr(v, pos, elem ? &(typeof(elem)){elem} : NULL) +#define Vector_Put(v, pos, elem) \ + __vector_PutPtr(v, pos, elem ? &(typeof(elem)){elem} : NULL) /* Push an element at the end of v, resizing it if needed. This macro wraps * __vector_PushPtr */ -#define Vector_Push(v, elem) __vector_PushPtr(v, elem ? &(typeof(elem)){elem} : NULL) +#define Vector_Push(v, elem) \ + __vector_PushPtr(v, elem ? &(typeof(elem)){elem} : NULL) int __vector_PushPtr(Vector *v, void *elem); @@ -59,10 +61,10 @@ int __vector_PushPtr(Vector *v, void *elem); int Vector_Resize(Vector *v, size_t newcap); /* return the used size of the vector, regardless of capacity */ -inline int Vector_Size(Vector *v) { return v->top; } +int Vector_Size(Vector *v); /* return the actual capacity */ -inline int Vector_Cap(Vector *v) { return v->cap; } +int Vector_Cap(Vector *v); /* free the vector and the underlying data. Does not release its elements if * they are pointers*/