Files
Dawn/src/util/dynarray.h
2021-09-18 23:13:05 -07:00

98 lines
2.6 KiB
C

/**
* Copyright (c) 2021 Dominic Masters
*
* This software is released under the MIT License.
* https://opensource.org/licenses/MIT
*/
#pragma once
#include "../libs.h"
#include "array.h"
/** Custom Array Definition */
typedef struct {
/** The data storage */
void *data;
/** Size of each element within the array */
size_t size;
/** The count of elements currently in the array */
int32_t length;
/** Total count of elements the array can hold */
int32_t total;
} dynarray_t;
/**
* Create a dynamic array. Dynamic arrays are a more highlevel array style that
* can offer great flexibility and ease-of-use, at the cost of memory, memory
* fragmentation and some slight performance. Great for when you need something
* like a traditional array, without the hassle of a linked list.
*
* @param array Array to initialize.
* @param size Size of each element within the array.
* @param total Total number of elements that the array can hold.
*/
void dynArrayInit(dynarray_t *array, size_t size, int32_t total);
/**
* Returns the pointer to an index within the array.
*
* @param array Array to get from.
* @param i Index to get
* @return Pointer to that element.
*/
void * dynArrayGet(dynarray_t *array, int32_t i);
/**
* Set something into the array.
*
* @param array Array to set into.
* @param i Index to set into.
* @param data Pointer to the data to set.
*/
void dynArraySet(dynarray_t *array, int32_t i, void *data);
/**
* Push an element into the array.
*
* @param array Array to push in to.
* @param data Pointer to the data to push.
* @return The index that the data was pushed in to.
*/
int32_t dynArrayPush(dynarray_t *array, void *data);
/**
* Create a new element in the array for you to use.
*
* @param array Array to add to.
* @return The index that the item was added to.
*/
int32_t dynArrayAdd(dynarray_t *array);
/**
* "Pops" (Removes) the last element from the array.
*
* @param array Array to pop.
*/
void dynArrayPop(dynarray_t *array);
/**
* Removes elements from out of the array, and shuffles the remaining items.
* This is useful for removing a specific item from an array and keeping the
* holes out of the array. This will readjust the indexes of all elements that
* appear after the spliced index.
*
* @param array Array to splice.
* @param start First index to splice.
* @param count Count of elements to splice
*/
void dynArraySplice(dynarray_t *array, int32_t start, int32_t count);
/**
* Dispose a previously created dynamic array.
*
* @param array Dynamic array to dispose.
*/
void dynArrayDispose(dynarray_t *array);