/
sawixy
/
Milk
Обзор
Документация
Войти
/
sawixy
/
Milk
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
main
src/vector.c
58 строк
2 KB
sawixy
Fixed macro_vec, hashmap
14 ноя 2025, 20:15
14 ноя 2025, 20:15
fdc9438
Код
Авторство
О чём код?
#include <collections/vector.h> #include <stdlib.h> #include <log.h> vec new_vec(u32 len) { vec vector = {}; u32 chunks_capacity_alloc = (len - 1) / ELEMENTS_IN_CHUNK + 1; vector.chunks = (_vec_chunk**)calloc(chunks_capacity_alloc, sizeof(_vec_chunk*)); for (u32 i = 0; i < chunks_capacity_alloc; i++) { vector.chunks[i] = (_vec_chunk*)malloc(sizeof(_vec_chunk)); vector.chunks[i]->data = calloc(ELEMENTS_IN_CHUNK, sizeof(void*)); } vector.len = len; vector.chunks_cap = chunks_capacity_alloc; return vector; } int vec_set(vec* vector, u32 index, void* value){ if (index / ELEMENTS_IN_CHUNK > vector->chunks_cap) return 1; if (index >= vector->len) return 2; _vec_chunk* chunk = vector->chunks[index / ELEMENTS_IN_CHUNK]; chunk->data[index % ELEMENTS_IN_CHUNK] = value; return 0; } void** vec_get(vec* vector, u32 index) { if (index / ELEMENTS_IN_CHUNK > vector->chunks_cap) return NULL; if (index >= vector->len) return NULL; return vector->chunks[index / ELEMENTS_IN_CHUNK]->data + (index % ELEMENTS_IN_CHUNK); } int reserve(vec* vector, u32 reserving_capacity) { u32 chunks_to_reserve = (reserving_capacity - 1) / ELEMENTS_IN_CHUNK + 1; vector->chunks = realloc(vector->chunks, (vector->chunks_cap + chunks_to_reserve) * sizeof(_vec_chunk*)); for (int i = vector->chunks_cap; i < vector->chunks_cap + chunks_to_reserve; i++){ vector->chunks[i] = (_vec_chunk*)malloc(sizeof(_vec_chunk)); vector->chunks[i]->data = malloc(ELEMENTS_IN_CHUNK * sizeof(void*)); } return 0; } void free_vec(vec* v){ if (v->chunks){ for (int i = 0; i < v->chunks_cap; i++){ free(v->chunks[i]->data); free(v->chunks[i]); } free(v->chunks); } }