Add files via upload

This commit is contained in:
StarFinger
2026-02-22 16:50:46 +03:00
committed by GitHub
commit 9f9f22f22c
8 changed files with 1349 additions and 0 deletions

51
dynamic_array.h Normal file
View File

@@ -0,0 +1,51 @@
#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