142 lines
4.5 KiB
C
142 lines
4.5 KiB
C
/**
|
|
* Copyright (c) 2021 Dominic Masters
|
|
*
|
|
* This software is released under the MIT License.
|
|
* https://opensource.org/licenses/MIT
|
|
*/
|
|
|
|
#pragma once
|
|
#include <dawn/dawn.h>
|
|
|
|
/**
|
|
* Retreive the pointer to an elment within the array of unknown type.
|
|
*
|
|
* @param size Size of each element within the array.
|
|
* @param array Array to get from.
|
|
* @param index Index to get
|
|
* @return Pointer to the item in the array.
|
|
*/
|
|
void * arrayGet(size_t size, void *array, int32_t index);
|
|
|
|
/**
|
|
* Set an object into the array.
|
|
*
|
|
* @param size Size of the element to set.
|
|
* @param array Array to set in to.
|
|
* @param index Index to set into.
|
|
* @param data Data to set into the array.
|
|
* @return void*
|
|
*/
|
|
void arraySet(size_t size, void *array, int32_t index, void *data);
|
|
|
|
/**
|
|
* Randomizes the contents of an array.
|
|
*
|
|
* @param size Size of each element within the array.
|
|
* @param array Array to shuffle.
|
|
* @param arrayLength Length of the array.
|
|
*/
|
|
void arrayShuffle(size_t size, void *array, int32_t arrayLength);
|
|
|
|
/**
|
|
* Find the index within the array that matches the given pointer.
|
|
*
|
|
* @param size Size of each element within the array.
|
|
* @param array Array to get from.
|
|
* @param length Max length to check to.
|
|
* @param value Pointer to the value to look for. This is memory compared.
|
|
* @returns The index within the array that matches, or -1 if no match.
|
|
*/
|
|
int32_t arrayFind(size_t size, void *array, int32_t length, void *value);
|
|
|
|
/**
|
|
* Compares each item in an array with the specified value, and returns true if
|
|
* found within the array. This is a shorthand for arrayFind without an int32_t
|
|
* being returned.
|
|
*
|
|
* @param size Size of each element within the array.
|
|
* @param array Array to get from.
|
|
* @param length Max length to check to.
|
|
* @param value Pointer to the value to look for. This is memory compared.
|
|
* @returns True if the array contains the value, otherwise false.
|
|
*/
|
|
bool arrayContains(size_t size, void *array, int32_t length, void *value);
|
|
|
|
/**
|
|
* Copies the raw contents from the source array to the destination array.
|
|
*
|
|
* @param size Size of each element within the array.
|
|
* @param source Source array.
|
|
* @param length Length of the source array.
|
|
* @param dest Destination array.
|
|
*/
|
|
void arrayCopy(size_t size, void *source, int32_t length, void *dest);
|
|
|
|
/**
|
|
* Sort an array based on the result of an array sort callback.
|
|
*
|
|
* @param size Size of each element within the array.
|
|
* @param array Array to sort.
|
|
* @param length Max length to sort to.
|
|
* @param sort Callback to use to sort.
|
|
*/
|
|
void arraySort(size_t size, void *array, int32_t length, arraysort_t *sort);
|
|
|
|
/**
|
|
* Sort an int32 array.
|
|
*
|
|
* @param array Array to sort.
|
|
* @param length Max length to sort.
|
|
*/
|
|
void arraySortInt32(int32_t *array, int32_t length);
|
|
/** Internal int32_t array sorter. */
|
|
int32_t _arraySorterInt32(const void *left, const void* right);
|
|
|
|
/**
|
|
* Sort a uint8_t array.
|
|
*
|
|
* @param array Array to sort.
|
|
* @param length Max Length to sort.
|
|
*/
|
|
void arraySortUint8(uint8_t *array, int32_t length);
|
|
/** Internal uint8_t array sorter. */
|
|
int32_t _arraySorterUint8(const void* left, const void* right);
|
|
|
|
/**
|
|
* Find the index of a string within a string array. (Array of char pointers).
|
|
*
|
|
* @param array Array to check
|
|
* @param arrayLength Length of th earray.
|
|
* @param value The value to search for.
|
|
* @return The index that the strings exists within the array.
|
|
*/
|
|
int32_t arrayFindString(char **array, int32_t arrayLength, char *value);
|
|
|
|
/**
|
|
* Rewinds an array backwards. This is used to take an array that has some data
|
|
* used towards the end of an array, but the data near the start is no longer
|
|
* used. This will take the end data and put it back at the start.
|
|
*
|
|
* @param size The size of each element within the array.
|
|
* @param source The array itself.
|
|
* @param length The total length of the array.
|
|
* @param start The first index within the array that you want to keep.
|
|
* @param count Count of items after start to use. Use -1 to take the remaining.
|
|
*/
|
|
void arrayRewind(size_t size, void *source, int32_t length, int32_t start,
|
|
int32_t count
|
|
);
|
|
|
|
/**
|
|
* Remove some elements from an array. This will cause the elements after the
|
|
* removed items to be shifted down into their place.
|
|
*
|
|
* @param size Size of each element within the array.
|
|
* @param array Array itself.
|
|
* @param start The first index you want to remove.
|
|
* @param count The count of elements to remove.
|
|
* @param length The length of the total array.
|
|
*/
|
|
void arraySplice(
|
|
size_t size, void *array, int32_t start, int32_t count, int32_t length
|
|
); |