diff options
author | Dan Albert <danalbert@google.com> | 2014-10-01 20:34:15 +0000 |
---|---|---|
committer | Android Git Automerger <android-git-automerger@android.com> | 2014-10-01 20:34:15 +0000 |
commit | fe50cfd53309af4dd49e572bd4a3120ea1494029 (patch) | |
tree | ba7193825608719276334b9de8bc3a6e5755c2d2 /tools/aapt/StringPool.cpp | |
parent | ee7684cad00a13fc82519599ad8fab3cfbd6fe8b (diff) | |
parent | c46dbe8ac4748a0084b026524ad9e5ac44fb9fde (diff) |
am c46dbe8a: Merge "Use std::sort instead of qsort_r wrapper."
* commit 'c46dbe8ac4748a0084b026524ad9e5ac44fb9fde':
Use std::sort instead of qsort_r wrapper.
Diffstat (limited to 'tools/aapt/StringPool.cpp')
-rw-r--r-- | tools/aapt/StringPool.cpp | 25 |
1 files changed, 14 insertions, 11 deletions
diff --git a/tools/aapt/StringPool.cpp b/tools/aapt/StringPool.cpp index c7fd0405163c..5edc1448bc9b 100644 --- a/tools/aapt/StringPool.cpp +++ b/tools/aapt/StringPool.cpp @@ -5,11 +5,13 @@ // #include "StringPool.h" -#include "ResourceTable.h" #include <utils/ByteOrder.h> #include <utils/SortedVector.h> -#include "qsort_r_compat.h" + +#include <algorithm> + +#include "ResourceTable.h" #if HAVE_PRINTF_ZD # define ZD "%zd" @@ -214,12 +216,15 @@ status_t StringPool::addStyleSpan(size_t idx, const entry_style_span& span) return NO_ERROR; } -int StringPool::config_sort(void* state, const void* lhs, const void* rhs) +StringPool::ConfigSorter::ConfigSorter(const StringPool& pool) : pool(pool) +{ +} + +bool StringPool::ConfigSorter::operator()(size_t l, size_t r) { - StringPool* pool = (StringPool*)state; - const entry& lhe = pool->mEntries[pool->mEntryArray[*static_cast<const size_t*>(lhs)]]; - const entry& rhe = pool->mEntries[pool->mEntryArray[*static_cast<const size_t*>(rhs)]]; - return lhe.compare(rhe); + const StringPool::entry& lhe = pool.mEntries[pool.mEntryArray[l]]; + const StringPool::entry& rhe = pool.mEntries[pool.mEntryArray[r]]; + return lhe.compare(rhe) < 0; } void StringPool::sortByConfig() @@ -240,10 +245,8 @@ void StringPool::sortByConfig() // Sort the array. 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. - qsort_r_compat(newPosToOriginalPos.editArray(), N, sizeof(size_t), this, config_sort); - //newPosToOriginalPos.sort(config_sort, this); + ConfigSorter sorter(*this); + std::sort(newPosToOriginalPos.begin(), newPosToOriginalPos.end(), sorter); NOISY(printf("DONE SORTING STRINGS BY CONFIGURATION.\n")); // Create the reverse mapping from the original position in the array |