Files
Chloride/src/runtime/internals/dynamic_array_armem/darray_armem.h
2025-08-02 20:17:24 +01:00

44 lines
1.1 KiB
C

/*
* SPDX-FileCopyrightText: 2025 William Bell
*
* SPDX-License-Identifier: GPL-3.0-or-later
*/
#ifndef darray_armem_H
#define darray_armem_H
#include <stdbool.h>
#include <stddef.h> // for size_t
#define CHUNK_SIZE 4096
typedef struct {
void *data;
size_t element_size;
size_t size;
size_t capacity;
bool resizable;
} darray_armem;
// Initializes the dynamic_array
void darray_armem_init(darray_armem *arr, size_t element_size);
// Pushes an element onto the array
void darray_armem_push(darray_armem *arr, void *element);
// Pops the last element, calling `free_data` if provided
void darray_armem_pop(darray_armem *arr, void (*free_data)(void *));
// Gets a pointer to an element at index
void *darray_armem_get(darray_armem *arr, size_t index);
// Frees the entire array and optionally each element
void darray_armem_free(darray_armem *arr, void (*free_data)(void *));
// Resizes the array to a new size (internal use, but exposed)
void darray_armem_resize(darray_armem *arr, size_t new_size);
darray_armem darray_armem_slice(darray_armem *arr, size_t start, size_t end);
#endif // darray_armem_H