added vector.c
This commit is contained in:
parent
5e77244e0f
commit
915ae2005e
70
ppthtml/vector.c
Normal file
70
ppthtml/vector.c
Normal file
@ -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 <stdlib.h>
|
||||||
|
#include <string.h>
|
||||||
|
|
||||||
|
/** 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);
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user