Merge "Use qsort_r_compat() as a portable wrapper for qsort_r()."
This commit is contained in:
@@ -9,6 +9,7 @@
|
||||
|
||||
#include <utils/ByteOrder.h>
|
||||
#include <utils/SortedVector.h>
|
||||
#include <cutils/qsort_r_compat.h>
|
||||
|
||||
#if HAVE_PRINTF_ZD
|
||||
# define ZD "%zd"
|
||||
@@ -213,11 +214,7 @@ status_t StringPool::addStyleSpan(size_t idx, const entry_style_span& span)
|
||||
return NO_ERROR;
|
||||
}
|
||||
|
||||
#ifdef __GLIBC__
|
||||
int StringPool::config_sort(const void* lhs, const void* rhs, void* state)
|
||||
#else
|
||||
int StringPool::config_sort(void* state, const void* lhs, const void* rhs)
|
||||
#endif
|
||||
{
|
||||
StringPool* pool = (StringPool*)state;
|
||||
const entry& lhe = pool->mEntries[pool->mEntryArray[*static_cast<const size_t*>(lhs)]];
|
||||
@@ -245,13 +242,7 @@ void StringPool::sortByConfig()
|
||||
NOISY(printf("SORTING STRINGS BY CONFIGURATION...\n"));
|
||||
// Vector::sort uses insertion sort, which is very slow for this data set.
|
||||
// Use quicksort instead because we don't need a stable sort here.
|
||||
// For more fun, GLibC took qsort_r from BSD but then decided to swap the
|
||||
// order the last two parameters.
|
||||
#ifdef __GLIBC__
|
||||
qsort_r(newPosToOriginalPos.editArray(), N, sizeof(size_t), config_sort, this);
|
||||
#else
|
||||
qsort_r(newPosToOriginalPos.editArray(), N, sizeof(size_t), this, config_sort);
|
||||
#endif
|
||||
qsort_r_compat(newPosToOriginalPos.editArray(), N, sizeof(size_t), this, config_sort);
|
||||
//newPosToOriginalPos.sort(config_sort, this);
|
||||
NOISY(printf("DONE SORTING STRINGS BY CONFIGURATION.\n"));
|
||||
|
||||
|
||||
@@ -139,11 +139,7 @@ public:
|
||||
const Vector<size_t>* offsetsForString(const String16& val) const;
|
||||
|
||||
private:
|
||||
#ifdef __GLIBC__
|
||||
static int config_sort(const void* lhs, const void* rhs, void* state);
|
||||
#else
|
||||
static int config_sort(void* state, const void* lhs, const void* rhs);
|
||||
#endif
|
||||
|
||||
const bool mUTF8;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user