35 lines
685 B
C
35 lines
685 B
C
#include <TeX/vector.h>
|
|
#include <stdlib.h>
|
|
#include <string.h>
|
|
|
|
#undef vector_make
|
|
|
|
/* vector_make(): Make a new vector of a given type */
|
|
void vector_make(vector_t *v, size_t elsize)
|
|
{
|
|
v->len = 0;
|
|
v->size = 0;
|
|
v->elsize = elsize;
|
|
v->data = NULL;
|
|
}
|
|
|
|
/* vector_append(): Append a new element to a vector */
|
|
void vector_append(vector_t *v, void *element)
|
|
{
|
|
/* Realloc whenever the vector runs out of space */
|
|
if(v->len >= v->size)
|
|
{
|
|
v->data = realloc(v->data, (v->size + 8) * v->elsize);
|
|
v->size += 8;
|
|
}
|
|
|
|
memcpy(v->data + v->len * v->elsize, element, v->elsize);
|
|
v->len++;
|
|
}
|
|
|
|
/* vector_free(): Free a vector's contents */
|
|
void vector_free(vector_t *v)
|
|
{
|
|
free(v->data);
|
|
}
|