diff options
author | 2012-03-19 10:49:00 -0700 | |
---|---|---|
committer | 2012-03-19 10:49:00 -0700 | |
commit | 31a7403f7e4f586263be47f053bd8d1d4fff321e (patch) | |
tree | da6740204980d707fab3f2244ab071d3ba028a28 /tools/aapt/StringPool.cpp | |
parent | 09bea716ec46fabac21a6079a6bd76624ad32cd9 (diff) | |
parent | c9fd9263feedac32e4f5b1f13a3246347efdc25f (diff) |
Merge "Use quicksort to sort the string pool."
Diffstat (limited to 'tools/aapt/StringPool.cpp')
-rw-r--r-- | tools/aapt/StringPool.cpp | 14 |
1 files changed, 9 insertions, 5 deletions
diff --git a/tools/aapt/StringPool.cpp b/tools/aapt/StringPool.cpp index 963ae59cdb5c..b6295bd0e3a7 100644 --- a/tools/aapt/StringPool.cpp +++ b/tools/aapt/StringPool.cpp @@ -213,11 +213,11 @@ status_t StringPool::addStyleSpan(size_t idx, const entry_style_span& span) return NO_ERROR; } -int StringPool::config_sort(const size_t* lhs, const size_t* rhs, void* state) +int StringPool::config_sort(void* state, const void* lhs, const void* rhs) { StringPool* pool = (StringPool*)state; - const entry& lhe = pool->mEntries[pool->mEntryArray[*lhs]]; - const entry& rhe = pool->mEntries[pool->mEntryArray[*rhs]]; + 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); } @@ -232,13 +232,17 @@ void StringPool::sortByConfig() // At that point it maps from the new position in the array to the // original position the entry appeared. Vector<size_t> newPosToOriginalPos; - for (size_t i=0; i<mEntryArray.size(); i++) { + newPosToOriginalPos.setCapacity(N); + for (size_t i=0; i < N; i++) { newPosToOriginalPos.add(i); } // Sort the array. NOISY(printf("SORTING STRINGS BY CONFIGURATION...\n")); - newPosToOriginalPos.sort(config_sort, this); + // 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(newPosToOriginalPos.editArray(), N, sizeof(size_t), this, config_sort); + //newPosToOriginalPos.sort(config_sort, this); NOISY(printf("DONE SORTING STRINGS BY CONFIGURATION.\n")); // Create the reverse mapping from the original position in the array |