Files
dynamic-array/dynamic_array.h
2026-02-22 16:50:46 +03:00

52 lines
1.8 KiB
C

#ifndef ARRAY_H
#define ARRAY_H
#include <stdlib.h>
#include <stdbool.h>
#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