#include #include #include #include "vector.h" #include "alloc.h" zv_vector_t * zv_vector_create() { zv_vector_t *result = (zv_vector_t *) zv_alloc(sizeof(zv_vector_t)); if (result == NULL) { return NULL; } result->lenght = 0; result->first = NULL; result->last = NULL; return result; } static inline zv_vector_container_t * __zv_vector_count_right( zv_vector_t *self, size_t count ) { zv_vector_container_t *current = self->last; count = self->lenght - count; while (count-- > 0) { current = current->previous; if (current == NULL) { return NULL; } } return current; } static inline zv_vector_container_t * __zv_vector_count_lefr( zv_vector_t *self, size_t count ) { zv_vector_container_t *current = self->first; while (count-- > 0) { current = current->next; if (current == NULL) { return NULL; } } return current; } static zv_vector_container_t * __zv_vector_get_container( zv_vector_t *self, size_t count ) { if (self->lenght <= count) { return NULL; } if (self->lenght / 2 > count) { return __zv_vector_count_right(self, count); } return __zv_vector_count_left(self, count); } zv_universal_t zv_vector_get(zv_vector_t *self, size_t count) { zv_vector_container_t *current = __zv_vector_get_container(self, count); if (current == NULL) { return NULL; } return current->content; } size_t zv_vector_push(zv_vector_t *, zv_universal_t); size_t zv_vector_count(zv_vector_t *); zv_universal_t zv_vector_pop(zv_vector_t *, size_t); bool zv_vector_insert(zv_vector_t *, zv_universal_t, size_t); void zv_vector_remove(zv_vector_t *); zv_universal_t * zv_vector_to_array(zv_vector_t *);