[C] Made vector functions internal
This commit is contained in:
116
src/vector.c
116
src/vector.c
@@ -26,7 +26,7 @@ static int vector_reallocate_(vector_t *vector, size_t new_capacity)
|
||||
}
|
||||
|
||||
/* ------------ Constructors & Destructors ----------------------------- */
|
||||
|
||||
FT_INTERNAL
|
||||
vector_t *create_vector(size_t item_size, size_t capacity)
|
||||
{
|
||||
vector_t *vector = (vector_t *)F_MALLOC(sizeof(vector_t));
|
||||
@@ -51,6 +51,7 @@ vector_t *create_vector(size_t item_size, size_t capacity)
|
||||
}
|
||||
|
||||
|
||||
FT_INTERNAL
|
||||
void destroy_vector(vector_t *vector)
|
||||
{
|
||||
assert(vector);
|
||||
@@ -58,25 +59,15 @@ void destroy_vector(vector_t *vector)
|
||||
F_FREE(vector);
|
||||
}
|
||||
|
||||
vector_t *copy_vector(vector_t *v)
|
||||
{
|
||||
if (v == NULL)
|
||||
return NULL;
|
||||
|
||||
vector_t *new_vector = create_vector(v->m_item_size, v->m_capacity);
|
||||
if (new_vector == NULL)
|
||||
return NULL;
|
||||
|
||||
memcpy(new_vector->m_data, v->m_data, v->m_item_size * v->m_size);
|
||||
new_vector->m_size = v->m_size ;
|
||||
new_vector->m_item_size = v->m_item_size ;
|
||||
return new_vector;
|
||||
}
|
||||
/*
|
||||
FT_INTERNAL
|
||||
|
||||
*/
|
||||
|
||||
|
||||
/* ----------- Nonmodifying functions --------------------------------- */
|
||||
|
||||
FT_INTERNAL
|
||||
size_t vector_size(const vector_t *vector)
|
||||
{
|
||||
assert(vector);
|
||||
@@ -84,30 +75,15 @@ size_t vector_size(const vector_t *vector)
|
||||
}
|
||||
|
||||
|
||||
FT_INTERNAL
|
||||
size_t vector_capacity(const vector_t *vector)
|
||||
{
|
||||
assert(vector);
|
||||
return vector->m_capacity;
|
||||
}
|
||||
|
||||
size_t vector_index_of(const vector_t *vector, const void *item)
|
||||
{
|
||||
assert(vector);
|
||||
assert(item);
|
||||
|
||||
size_t i = 0;
|
||||
for (i = 0; i < vector->m_size; ++i) {
|
||||
void *data_pos = (char *)vector->m_data + i * vector->m_item_size;
|
||||
if (memcmp(data_pos, item, vector->m_item_size) == 0) {
|
||||
return i;
|
||||
}
|
||||
}
|
||||
return INVALID_VEC_INDEX;
|
||||
}
|
||||
|
||||
|
||||
/* ----------- Modifying functions ------------------------------------- */
|
||||
|
||||
FT_INTERNAL
|
||||
int vector_push(vector_t *vector, const void *item)
|
||||
{
|
||||
assert(vector);
|
||||
@@ -128,26 +104,7 @@ int vector_push(vector_t *vector, const void *item)
|
||||
}
|
||||
|
||||
|
||||
int vector_erase(vector_t *vector, size_t index)
|
||||
{
|
||||
assert(vector);
|
||||
|
||||
if (vector->m_size == 0 || index >= vector->m_size)
|
||||
return FT_ERROR;
|
||||
|
||||
memmove((char *)vector->m_data + vector->m_item_size * index,
|
||||
(char *)vector->m_data + vector->m_item_size * (index + 1),
|
||||
(vector->m_size - 1 - index) * vector->m_item_size);
|
||||
vector->m_size--;
|
||||
return FT_SUCCESS;
|
||||
}
|
||||
|
||||
|
||||
void vector_clear(vector_t *vector)
|
||||
{
|
||||
vector->m_size = 0;
|
||||
}
|
||||
|
||||
FT_INTERNAL
|
||||
const void *vector_at_c(const vector_t *vector, size_t index)
|
||||
{
|
||||
if (index >= vector->m_size)
|
||||
@@ -157,6 +114,7 @@ const void *vector_at_c(const vector_t *vector, size_t index)
|
||||
}
|
||||
|
||||
|
||||
FT_INTERNAL
|
||||
void *vector_at(vector_t *vector, size_t index)
|
||||
{
|
||||
if (index >= vector->m_size)
|
||||
@@ -165,6 +123,8 @@ void *vector_at(vector_t *vector, size_t index)
|
||||
return (char *)vector->m_data + index * vector->m_item_size;
|
||||
}
|
||||
|
||||
|
||||
FT_INTERNAL
|
||||
fort_status_t vector_swap(vector_t *cur_vec, vector_t *mv_vec, size_t pos)
|
||||
{
|
||||
assert(cur_vec);
|
||||
@@ -219,4 +179,56 @@ fort_status_t vector_swap(vector_t *cur_vec, vector_t *mv_vec, size_t pos)
|
||||
}
|
||||
|
||||
|
||||
#ifdef FT_TEST_BUILD
|
||||
vector_t *copy_vector(vector_t *v)
|
||||
{
|
||||
if (v == NULL)
|
||||
return NULL;
|
||||
|
||||
vector_t *new_vector = create_vector(v->m_item_size, v->m_capacity);
|
||||
if (new_vector == NULL)
|
||||
return NULL;
|
||||
|
||||
memcpy(new_vector->m_data, v->m_data, v->m_item_size * v->m_size);
|
||||
new_vector->m_size = v->m_size ;
|
||||
new_vector->m_item_size = v->m_item_size ;
|
||||
return new_vector;
|
||||
}
|
||||
|
||||
|
||||
size_t vector_index_of(const vector_t *vector, const void *item)
|
||||
{
|
||||
assert(vector);
|
||||
assert(item);
|
||||
|
||||
size_t i = 0;
|
||||
for (i = 0; i < vector->m_size; ++i) {
|
||||
void *data_pos = (char *)vector->m_data + i * vector->m_item_size;
|
||||
if (memcmp(data_pos, item, vector->m_item_size) == 0) {
|
||||
return i;
|
||||
}
|
||||
}
|
||||
return INVALID_VEC_INDEX;
|
||||
}
|
||||
|
||||
|
||||
int vector_erase(vector_t *vector, size_t index)
|
||||
{
|
||||
assert(vector);
|
||||
|
||||
if (vector->m_size == 0 || index >= vector->m_size)
|
||||
return FT_ERROR;
|
||||
|
||||
memmove((char *)vector->m_data + vector->m_item_size * index,
|
||||
(char *)vector->m_data + vector->m_item_size * (index + 1),
|
||||
(vector->m_size - 1 - index) * vector->m_item_size);
|
||||
vector->m_size--;
|
||||
return FT_SUCCESS;
|
||||
}
|
||||
|
||||
|
||||
void vector_clear(vector_t *vector)
|
||||
{
|
||||
vector->m_size = 0;
|
||||
}
|
||||
#endif
|
||||
|
44
src/vector.h
44
src/vector.h
@@ -4,26 +4,31 @@
|
||||
#include "fort_utils.h"
|
||||
|
||||
|
||||
/*****************************************************************************
|
||||
* VECTOR
|
||||
* ***************************************************************************/
|
||||
|
||||
#define INVALID_VEC_INDEX ((size_t) -1)
|
||||
|
||||
extern vector_t *create_vector(size_t item_size, size_t capacity);
|
||||
extern void destroy_vector(vector_t *);
|
||||
extern vector_t *copy_vector(vector_t *);
|
||||
FT_INTERNAL
|
||||
vector_t *create_vector(size_t item_size, size_t capacity);
|
||||
|
||||
extern size_t vector_size(const vector_t *);
|
||||
extern size_t vector_capacity(const vector_t *);
|
||||
extern size_t vector_index_of(const vector_t *, const void *item);
|
||||
FT_INTERNAL
|
||||
void destroy_vector(vector_t *);
|
||||
|
||||
extern int vector_push(vector_t *, const void *item);
|
||||
extern int vector_erase(vector_t *, size_t index);
|
||||
extern void vector_clear(vector_t *);
|
||||
extern const void *vector_at_c(const vector_t *vector, size_t index);
|
||||
extern void *vector_at(vector_t *, size_t index);
|
||||
extern fort_status_t vector_swap(vector_t *cur_vec, vector_t *mv_vec, size_t pos);
|
||||
FT_INTERNAL
|
||||
size_t vector_size(const vector_t *);
|
||||
|
||||
FT_INTERNAL
|
||||
size_t vector_capacity(const vector_t *);
|
||||
|
||||
FT_INTERNAL
|
||||
int vector_push(vector_t *, const void *item);
|
||||
|
||||
FT_INTERNAL
|
||||
const void *vector_at_c(const vector_t *vector, size_t index);
|
||||
|
||||
FT_INTERNAL
|
||||
void *vector_at(vector_t *, size_t index);
|
||||
|
||||
FT_INTERNAL
|
||||
fort_status_t vector_swap(vector_t *cur_vec, vector_t *mv_vec, size_t pos);
|
||||
|
||||
|
||||
#define FOR_EACH_(type, item, vector, index_name) \
|
||||
@@ -33,4 +38,11 @@ extern fort_status_t vector_swap(vector_t *cur_vec, vector_t *mv_vec, size_t pos
|
||||
#define FOR_EACH(type, item, vector) \
|
||||
FOR_EACH_(type, item, vector, UNIQUE_NAME(i))
|
||||
|
||||
#ifdef FT_TEST_BUILD
|
||||
vector_t *copy_vector(vector_t *);
|
||||
size_t vector_index_of(const vector_t *, const void *item);
|
||||
int vector_erase(vector_t *, size_t index);
|
||||
void vector_clear(vector_t *);
|
||||
#endif
|
||||
|
||||
#endif /* VECTOR_H */
|
||||
|
Reference in New Issue
Block a user