diff options
Diffstat (limited to '7zip/UI/Common/SortUtils.cpp')
-rwxr-xr-x | 7zip/UI/Common/SortUtils.cpp | 21 |
1 files changed, 7 insertions, 14 deletions
diff --git a/7zip/UI/Common/SortUtils.cpp b/7zip/UI/Common/SortUtils.cpp index 1c647d53..8c953750 100755 --- a/7zip/UI/Common/SortUtils.cpp +++ b/7zip/UI/Common/SortUtils.cpp @@ -4,29 +4,22 @@ #include "SortUtils.h" -static int __cdecl CompareStrings(const void *a1, const void *a2) +static int CompareStrings(const int *p1, const int *p2, void *param) { - const UString &s1 = *(*(*((const UString ***)a1))); - const UString &s2 = *(*(*((const UString ***)a2))); + const UStringVector &strings = *(const UStringVector *)param; + const UString &s1 = strings[*p1]; + const UString &s2 = strings[*p2]; return s1.CompareNoCase(s2); } void SortStringsToIndices(const UStringVector &strings, CIntVector &indices) { indices.Clear(); - if (strings.IsEmpty()) - return; int numItems = strings.Size(); - CPointerVector pointers; - pointers.Reserve(numItems); indices.Reserve(numItems); - int i; - for(i = 0; i < numItems; i++) - pointers.Add((void *)&strings.CPointerVector::operator[](i)); - void **stringsBase = (void **)pointers[0]; - qsort(&pointers[0], numItems, sizeof(void *), CompareStrings); - for(i = 0; i < numItems; i++) - indices.Add((int)((void **)pointers[i] - stringsBase)); + for(int i = 0; i < numItems; i++) + indices.Add(i); + indices.Sort(CompareStrings, (void *)&strings); } void SortStrings(const UStringVector &src, UStringVector &dest) |