This repository has been archived on 2026-04-17. You can view files and clone it. You cannot open issues or pull requests or push a commit.
Files
bhlib/include/BH/Algo.h

128 lines
3.3 KiB
C
Raw Normal View History

2025-01-18 17:24:36 +03:00
#ifndef BH_ALGO_H
#define BH_ALGO_H
#include "Common.h"
2025-01-18 17:24:36 +03:00
/**
* Exchanges values between \a src and \a dest elements of sizze \a size.
2025-01-18 17:24:36 +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
*/
void BH_Swap(void *dest,
2025-01-18 17:24:36 +03:00
void *src,
size_t size);
/**
* 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
*
* The \a pivot element can be part of the partitioned \a array.
2025-01-18 17:24:36 +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.
*/
void *BH_Partition(void *pivot,
2025-01-18 17:24:36 +03:00
void *array,
size_t size,
size_t element,
BH_EqualCallback equal);
2025-01-18 17:24:36 +03:00
/**
* Sorts the \a array (with specified \a size and \a element size).
2025-01-18 17:24:36 +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
*/
void BH_Sort(void *array,
2025-01-18 17:24:36 +03:00
size_t size,
size_t element,
BH_EqualCallback equal);
2025-01-18 17:24:36 +03:00
/**
* Heapifies an \a array (with specified \a size and \a element size).
2025-01-18 17:24:36 +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
*/
void BH_HeapMake(void *array,
size_t size,
size_t element,
BH_EqualCallback equal);
2025-01-18 17:24:36 +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
*
* \param array Array pointer
2025-01-18 17:24:36 +03:00
* \param size Array size
* \param element Array element size
2025-01-18 17:24:36 +03:00
* \param equal Comparasion function
*/
void BH_HeapRemove(void *array,
size_t size,
size_t element,
BH_EqualCallback equal);
2025-01-18 17:24:36 +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
*
* 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
*
* \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
*/
void BH_HeapInsert(void *value,
void *array,
size_t size,
size_t element,
BH_EqualCallback equal);
2025-01-18 17:24:36 +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
*
* 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
*
* \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
*/
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 */