3 #include "portability.h"
4 #include "lib/stdlib.h"
5 #include "lib/string.h"
6 #include "../include/vector.h"
9 vector_t* vec = calloc(1,
sizeof *vec);
15 vec->data = calloc(1,
sizeof(
size_t));
29 void vector_resize(
vector_t* vec,
size_t size) {
33 void* new_buf = realloc(vec->data,
sizeof(
size_t) * size);
43 void vector_push_back(
vector_t* vec,
size_t element) {
44 if(vec->size >= vec->capacity) {
46 size_t new_cap = vec->capacity + ((vec->capacity + 1) / 2);
48 void* new_buf = realloc(vec->data,
sizeof(
size_t) * new_cap);
54 vec->capacity = new_cap;
57 vec->data[vec->size++] = element;
71 if(!vec || index >= vec->size)
74 return VEC_OK(vec->data[index]);
77 void vector_erase_all(
vector_t* vec) {
83 vec->data = calloc(1,
sizeof(
size_t));
95 size_t val = vec->data[n];
97 for(
size_t i = n; i < vec->size - 1; i++) {
98 vec->data[i] = vec->data[i + 1];
110 vector_t* new_vec = calloc(1,
sizeof *new_vec);
112 new_vec->data = calloc(original->capacity,
sizeof(
size_t));
114 memcpy(new_vec->data, original->data,
sizeof(
size_t) * original->capacity);
116 new_vec->size = original->size;
117 new_vec->capacity = original->capacity;
122 void vector_shrink_fit(
vector_t* original) {
126 void* data = realloc(original->data, original->size);
131 original->data = data;
132 original->capacity = original->size;
135 void vector_swap(
vector_t* vec,
size_t first,
size_t second) {
139 if(first >= vec->size || second >= vec->size)
143 size_t b = vec->data[second];
144 vec->data[second] = vec->data[first];
145 vec->data[first] = b;
150 void vector_insert(
vector_t* vec,
size_t index,
size_t value) {
154 if(index >= vec->size)
157 vector_resize(vec, vec->size + 1);
159 for(
size_t i = vec->size - 1; i > index; i--) {
160 vec->data[i] = vec->data[i - 1];
163 vec->data[index] = value;
166 void vector_destroy(
vector_t* vec) {
void * memcpy(void *restrict destination, const void *restrict source, size_t n)
Копирование непересекающихся массивов используя SSE.