mirror of
https://github.com/Xevion/easy7zip.git
synced 2025-12-11 18:07:08 -06:00
4.27 beta
This commit is contained in:
committed by
Kornel Lesiński
parent
31e7b924e8
commit
d66cf2fcf3
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user