diff --git a/ppthtml/vector.c b/ppthtml/vector.c new file mode 100644 index 0000000..c2c243e --- /dev/null +++ b/ppthtml/vector.c @@ -0,0 +1,70 @@ + +/** + * @file vector.c + * @brief Functions for creating and manipulating vectors. + * + * @author Jon Schutz + * @date 05-Feb-2001 + **/ + +#include "vector.h" +#include +#include + +/** Resize a vector. + @param v The vector to resize. + @param size The new size of the vector. Must be >= 0. + @param element_size The size of elements in the vector. + @return 0 on success, -1 if a memory allocation error occurred. +*/ +int +vector_resize(vector *v, size_t size, size_t element_size) +{ + void *b; + + b = (v->array)?realloc(v->array, size * element_size) + :malloc(size * element_size); + + if ((0 < (size * element_size)) && (NULL == b)) + return -1; + + if (size > v->array_size) { + memset(b + v->array_size * element_size, 0, + (size - v->array_size) * element_size); + } + v->array = b; + v->array_size = size; + return 0; +} + +/** Create a new vector. + + @param v The vector to be initialised. + @param size The size of the set. + @param element_size The size of elements in the vector. + @return 0 on success, -1 on error. +*/ +int +vector_create(vector *v, size_t size, size_t element_size) +{ + v->array = NULL; + v->array_size = 0; + v->index = 0; + + return vector_resize(v, size, element_size); +} + +/** Destroy a vector, freeing storage associated with it. */ +void +vector_destroy(vector *v) +{ + free(v->array); + v->array = NULL; + v->array_size = 0; +} + +int +word_vector_strcmp(const char **a, const char **b) +{ + return strcmp(*a, *b); +}