2025-01-18 17:24:36 +03:00
|
|
|
#ifndef BH_ALGO_H
|
|
|
|
|
#define BH_ALGO_H
|
|
|
|
|
|
|
|
|
|
|
2025-02-02 21:40:31 +03:00
|
|
|
#include "Common.h"
|
2025-01-18 17:24:36 +03:00
|
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
2025-02-03 15:18:57 +03:00
|
|
|
* Exchanges values between \a src and \a dest elements of sizze \a size.
|
2025-01-18 17:24:36 +03:00
|
|
|
*
|
2025-02-03 15:18:57 +03:00
|
|
|
* \param dest Destination element pointer
|
|
|
|
|
* \param src Source element pointer
|
2025-01-18 17:24:36 +03:00
|
|
|
* \param size Element size in bytes
|
|
|
|
|
*/
|
2025-01-30 13:53:26 +03:00
|
|
|
void BH_Swap(void *dest,
|
2025-01-18 17:24:36 +03:00
|
|
|
void *src,
|
|
|
|
|
size_t size);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
2025-02-03 15:18:57 +03:00
|
|
|
* Partitions the \a array (with specified \a size and \a element size)
|
|
|
|
|
* relative to specified \a pivot element.
|
2025-01-18 17:24:36 +03:00
|
|
|
*
|
2025-02-03 15:18:57 +03:00
|
|
|
* The \a pivot element can be part of the partitioned \a array.
|
2025-01-18 17:24:36 +03:00
|
|
|
*
|
2025-02-03 15:18:57 +03:00
|
|
|
* \param pivot Pivot element pointer
|
|
|
|
|
* \param array Array pointer
|
|
|
|
|
* \param size Array size
|
|
|
|
|
* \param element Array element size
|
|
|
|
|
* \param equal Comparision function
|
2025-01-18 17:24:36 +03:00
|
|
|
*
|
|
|
|
|
* \return Pointer to the first element of the second partition.
|
|
|
|
|
*/
|
2025-01-30 13:53:26 +03:00
|
|
|
void *BH_Partition(void *pivot,
|
2025-01-18 17:24:36 +03:00
|
|
|
void *array,
|
|
|
|
|
size_t size,
|
|
|
|
|
size_t element,
|
2025-01-30 13:53:26 +03:00
|
|
|
BH_EqualCallback equal);
|
2025-01-18 17:24:36 +03:00
|
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
2025-02-03 15:18:57 +03:00
|
|
|
* Sorts the \a array (with specified \a size and \a element size).
|
2025-01-18 17:24:36 +03:00
|
|
|
*
|
2025-02-03 15:18:57 +03:00
|
|
|
* The sorting algorithm is implementation defined and may change between
|
|
|
|
|
* revisions.
|
|
|
|
|
*
|
|
|
|
|
* \param array Array pointer
|
|
|
|
|
* \param size Array size
|
|
|
|
|
* \param element Array element size
|
|
|
|
|
* \param equal Comparision function
|
2025-01-18 17:24:36 +03:00
|
|
|
*/
|
2025-01-30 13:53:26 +03:00
|
|
|
void BH_Sort(void *array,
|
2025-01-18 17:24:36 +03:00
|
|
|
size_t size,
|
|
|
|
|
size_t element,
|
2025-01-30 13:53:26 +03:00
|
|
|
BH_EqualCallback equal);
|
2025-01-18 17:24:36 +03:00
|
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
2025-02-03 15:18:57 +03:00
|
|
|
* Heapifies an \a array (with specified \a size and \a element size).
|
2025-01-18 17:24:36 +03:00
|
|
|
*
|
2025-02-03 15:18:57 +03:00
|
|
|
* \param array Array pointer
|
|
|
|
|
* \param size Array size
|
|
|
|
|
* \param element Array element size
|
|
|
|
|
* \param equal Comparision function
|
2025-01-18 17:24:36 +03:00
|
|
|
*/
|
2025-01-30 13:53:26 +03:00
|
|
|
void BH_HeapMake(void *array,
|
|
|
|
|
size_t size,
|
|
|
|
|
size_t element,
|
|
|
|
|
BH_EqualCallback equal);
|
2025-01-18 17:24:36 +03:00
|
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
2025-02-03 15:18:57 +03:00
|
|
|
* Removes top value from the heapified \a array (with specified \a size
|
|
|
|
|
* and \a element size).
|
2025-01-18 17:24:36 +03:00
|
|
|
*
|
2025-02-03 15:18:57 +03:00
|
|
|
* \param array Array pointer
|
2025-01-18 17:24:36 +03:00
|
|
|
* \param size Array size
|
2025-02-03 15:18:57 +03:00
|
|
|
* \param element Array element size
|
2025-01-18 17:24:36 +03:00
|
|
|
* \param equal Comparasion function
|
|
|
|
|
*/
|
2025-01-30 13:53:26 +03:00
|
|
|
void BH_HeapRemove(void *array,
|
|
|
|
|
size_t size,
|
|
|
|
|
size_t element,
|
|
|
|
|
BH_EqualCallback equal);
|
2025-01-18 17:24:36 +03:00
|
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
2025-02-03 15:18:57 +03:00
|
|
|
* Inserts new \a value into heapified \a array in an array (with specified
|
|
|
|
|
* \a size and \a element size)
|
2025-01-18 17:24:36 +03:00
|
|
|
*
|
2025-02-03 15:18:57 +03:00
|
|
|
* If \a value pointer is NULL, it is assumed that new value is placed at the
|
|
|
|
|
* end of the array.
|
2025-01-18 17:24:36 +03:00
|
|
|
*
|
2025-02-03 15:18:57 +03:00
|
|
|
* \param value Value pointer
|
|
|
|
|
* \param array Array pointer
|
|
|
|
|
* \param size Array size
|
|
|
|
|
* \param element Array element size
|
|
|
|
|
* \param equal Comparasion function
|
2025-01-18 17:24:36 +03:00
|
|
|
*/
|
2025-01-30 13:53:26 +03:00
|
|
|
void BH_HeapInsert(void *value,
|
|
|
|
|
void *array,
|
|
|
|
|
size_t size,
|
|
|
|
|
size_t element,
|
|
|
|
|
BH_EqualCallback equal);
|
2025-01-18 17:24:36 +03:00
|
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
2025-02-03 15:18:57 +03:00
|
|
|
* Removes top value from heapified \a array (with specified \a size and
|
|
|
|
|
* \a element size) and inserts new \a value.
|
2025-01-18 17:24:36 +03:00
|
|
|
*
|
2025-02-03 15:18:57 +03:00
|
|
|
* If value pointer is NULL, it is assumed that new value is placed at the
|
|
|
|
|
* end of the array.
|
2025-01-18 17:24:36 +03:00
|
|
|
*
|
2025-02-03 15:18:57 +03:00
|
|
|
* \param value Value pointer
|
|
|
|
|
* \param array Array pointer
|
|
|
|
|
* \param size Array size
|
|
|
|
|
* \param element Array element size
|
|
|
|
|
* \param equal Comparasion function
|
2025-01-18 17:24:36 +03:00
|
|
|
*/
|
2025-01-30 13:53:26 +03:00
|
|
|
void BH_HeapReplace(void *value,
|
|
|
|
|
void *array,
|
|
|
|
|
size_t size,
|
|
|
|
|
size_t element,
|
|
|
|
|
BH_EqualCallback equal);
|
2025-01-18 17:24:36 +03:00
|
|
|
|
|
|
|
|
|
|
|
|
|
#endif /* BH_ALGO_H */
|