98 lines
2.6 KiB
C
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); |