diff options
Diffstat (limited to 'rushs/tinyprintf/vector/vector.c')
| -rw-r--r-- | rushs/tinyprintf/vector/vector.c | 152 |
1 files changed, 0 insertions, 152 deletions
diff --git a/rushs/tinyprintf/vector/vector.c b/rushs/tinyprintf/vector/vector.c deleted file mode 100644 index cbd19aa..0000000 --- a/rushs/tinyprintf/vector/vector.c +++ /dev/null @@ -1,152 +0,0 @@ -#include "vector.h" - -#include <stdio.h> -#include <stdlib.h> - -struct vector *vector_init(size_t n) -{ - struct vector *res = malloc(sizeof(struct vector)); - if (res == NULL) - { - return NULL; - } - - res->size = 0; - res->capacity = n; - res->data = malloc(n * sizeof(int)); - if (res->data == NULL) - { - return NULL; - } - return res; -} - -void vector_destroy(struct vector *v) -{ - if (v) - { - free(v->data); - free(v); - } -} - -struct vector *vector_resize(struct vector *v, size_t n) -{ - if (!v) - { - return NULL; - } - if (n == v->capacity) - { - return v; - } - if (v) - { - int *tmp = realloc(v->data, n * sizeof(int)); - if (tmp == NULL) - { - return NULL; - } - v->data = tmp; - - if (n < v->size) - { - v->size = n; - } - v->capacity = n; - return v; - } - return NULL; -} - -struct vector *vector_append(struct vector *v, int elt) -{ - if (v == NULL) - { - return NULL; - } - - if (v->size == v->capacity) - { - if (vector_resize(v, v->capacity * 2) == NULL) - { - return NULL; - } - } - v->data[v->size] = elt; - v->size++; - return v; -} - -void vector_print(const struct vector *v) -{ - if (v == NULL || v->size == 0) - { - printf("\n"); - return; - } - for (size_t i = 0; i < v->size - 1; i++) - { - printf("%d,", v->data[i]); - } - printf("%d\n", v->data[v->size - 1]); -} - -struct vector *vector_reset(struct vector *v, size_t n) -{ - if (vector_resize(v, n) == NULL) - { - return NULL; - } - - v->size = 0; - return v; -} - -struct vector *vector_insert(struct vector *v, size_t i, int elt) -{ - if (v == NULL || i > v->size) - return NULL; - if (i == v->size) - { - return vector_append(v, elt); - } - if (v->size == v->capacity) - { - if (vector_resize(v, v->capacity * 2) == NULL) - { - return NULL; - } - } - for (size_t j = v->size; j > i; j--) - { - v->data[j] = v->data[j - 1]; - } - v->size++; - - v->data[i] = elt; - return v; -} - -struct vector *vector_remove(struct vector *v, size_t i) -{ - if (v == NULL || v->size == 0 || i >= v->size) - { - return NULL; - } - for (size_t j = i; j < v->size - 1; j++) - { - v->data[j] = v->data[j + 1]; - } - - v->size--; - - if (v->size < v->capacity / 2) - { - if (vector_resize(v, v->capacity / 2) == NULL) - { - return NULL; - } - } - return v; -} |
