#ifndef ARRAY_H #define ARRAY_H #include #include #include "type_info.h" typedef struct DynamicArray { char *data; const TypeInfo *type; size_t capacity; // ёмкость size_t size; // текущий размер } DynamicArray; // Создание/уничтожение DynamicArray* da_create(const TypeInfo *type, size_t initial_capacity); void da_destroy(DynamicArray *arr); // Доступ к элементам void* da_get(const DynamicArray *arr, const size_t index); bool da_set(DynamicArray *arr, const size_t index, const void *value); size_t da_size(const DynamicArray *arr); // Модификация bool da_push_back(DynamicArray *arr, const void *value); bool da_insert(DynamicArray *arr, const size_t index, const void *value); bool da_remove(DynamicArray *arr, const size_t index); // Операции // Сортировка (используется compare из TypeInfo) void da_sort(DynamicArray *arr); // map: применить f к каждому элементу и вернуть новый массив typedef void (*MapFunc)(void *dest, const void *src); DynamicArray* da_map(const DynamicArray *arr, MapFunc f); // where: фильтрация по предикату typedef bool (*Predicate)(const void *elem); DynamicArray* da_where(const DynamicArray *arr, Predicate pred); // reduce: свёртка массива в один элемент typedef void (*ReduceFunc)(void *accumulator, const void *elem); void da_reduce(const DynamicArray *arr, ReduceFunc f, void *initial, void *result); // Конкатенация: возвращает новый массив DynamicArray* da_concat(const DynamicArray *a, const DynamicArray *b); // Вспомогательные функции void da_print(const DynamicArray *arr); #endif // ARRAY_H