| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889 |
- #include <stdint.h>
- #include <stddef.h>
- #include <stdbool.h>
- #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 *);
|