diff --git a/src/utils/tvgArray.h b/src/utils/tvgArray.h index 0e8aef30..b96db9b3 100644 --- a/src/utils/tvgArray.h +++ b/src/utils/tvgArray.h @@ -24,6 +24,7 @@ #define _TVG_ARRAY_H_ #include +#include namespace tvg { @@ -110,6 +111,12 @@ struct Array return count == 0; } + template + void sort() + { + qsort(data, 0, static_cast(count) - 1); + } + void operator=(const Array& rhs) { reserve(rhs.count); @@ -121,6 +128,32 @@ struct Array { free(data); } + +private: + template + void qsort(T* arr, int32_t low, int32_t high) + { + if (low < high) { + int32_t i = low; + int32_t j = high; + T tmp = arr[low]; + while (i < j) { + while (i < j && !COMPARE{}(arr[j], tmp)) --j; + if (i < j) { + arr[i] = arr[j]; + ++i; + } + while (i < j && COMPARE{}(arr[i], tmp)) ++i; + if (i < j) { + arr[j] = arr[i]; + --j; + } + } + arr[i] = tmp; + qsort(arr, low, i - 1); + qsort(arr, i + 1, high); + } + } }; }