STDMETHODIMP CVBA::ArraySortS(VARIANT* array_in_out, VARIANT_BOOL sort_order, LONG key_1, LONG key_2, LONG key_3, LONG sort_orientation, VARIANT_BOOL delete_duplicates, VARIANT_BOOL out_array_index, VARIANT* index_array_out)
{
mov dword ptr [rsp+20h],r9d
mov word ptr [rsp+18h],r8w
mov qword ptr [rsp+10h],rdx
mov qword ptr [rsp+8],rcx
push rbp
push rsi
push rdi
mov eax,21E0h
call __chkstk (07FEBAD29FD4h)
sub rsp,rax
lea rbp,[rsp+30h]
mov rdi,rsp
mov ecx,878h
mov eax,0CCCCCCCCh
rep stos dword ptr [rdi]
mov rcx,qword ptr [rsp+2208h]
mov rax,qword ptr [__security_cookie (07FEBB0853E8h)]
xor rax,rbp
mov qword ptr [rbp+21A8h],rax
lea rcx,[__0DDB0688_vba@cpp (07FEBB0B2182h)]
call __CheckForDebuggerJustMyCode (07FEBAD225E0h)
if (array_in_out->vt != 8200) { return E_INVALIDARG; }
mov rax,qword ptr [array_in_out]
movzx eax,word ptr [rax]
cmp eax,2008h
je CVBA::ArraySortS+79h (07FEBADBB679h)
mov eax,80070057h
jmp CVBA::ArraySortS+24FBh (07FEBADBDAFBh)
if (sort_orientation <0 || sort_orientation > 3) { return E_INVALIDARG; } //границы метода
cmp dword ptr [sort_orientation],0
if (sort_orientation <0 || sort_orientation > 3) { return E_INVALIDARG; } //границы метода
jl CVBA::ArraySortS+8Bh (07FEBADBB68Bh)
cmp dword ptr [sort_orientation],3
jle CVBA::ArraySortS+95h (07FEBADBB695h)
mov eax,80070057h
jmp CVBA::ArraySortS+24FBh (07FEBADBDAFBh)
if (sort_orientation >1 && out_array_index) { return E_INVALIDARG; } //массив мндексов выводится для первых двух методов сортировки
cmp dword ptr [sort_orientation],1
jle CVBA::ArraySortS+0B3h (07FEBADBB6B3h)
movsx eax,word ptr [out_array_index]
test eax,eax
je CVBA::ArraySortS+0B3h (07FEBADBB6B3h)
mov eax,80070057h
jmp CVBA::ArraySortS+24FBh (07FEBADBDAFBh)
long cDims = array_in_out->parray->cDims;
mov rax,qword ptr [array_in_out]
mov rax,qword ptr [rax+8]
movzx eax,word ptr [rax]
mov dword ptr [cDims],eax
if (cDims > 2) { return E_INVALIDARG; }
cmp dword ptr [cDims],2
jle CVBA::ArraySortS+0D4h (07FEBADBB6D4h)
mov eax,80070057h
jmp CVBA::ArraySortS+24FBh (07FEBADBDAFBh)
long lLbound_0 = array_in_out->parray->rgsabound[0].lLbound;//нижняя граница 1х массив
mov rax,qword ptr [array_in_out]
mov rax,qword ptr [rax+8]
mov ecx,8
imul rcx,rcx,0
mov eax,dword ptr [rax+rcx+1Ch]
mov dword ptr [lLbound_0],eax
long cElements_0 = array_in_out->parray->rgsabound[0].cElements;//количество элементов 1х массив/2х массив - столбцов
mov rax,qword ptr [array_in_out]
mov rax,qword ptr [rax+8]
mov ecx,8
long cElements_0 = array_in_out->parray->rgsabound[0].cElements;//количество элементов 1х массив/2х массив - столбцов
imul rcx,rcx,0
mov eax,dword ptr [rax+rcx+18h]
mov dword ptr [cElements_0],eax
long lLbound_1 = 0;//нижняя граница 2х массив
mov dword ptr [lLbound_1],0
long cElements_1 = 0;//количество элементов 2х массив
mov dword ptr [cElements_1],0
if (cDims == 2) {
cmp dword ptr [cDims],2
jne CVBA::ArraySortS+15Ah (07FEBADBB75Ah)
lLbound_1 = array_in_out->parray->rgsabound[1].lLbound;
mov rax,qword ptr [array_in_out]
mov rax,qword ptr [rax+8]
mov ecx,8
imul rcx,rcx,1
mov eax,dword ptr [rax+rcx+1Ch]
mov dword ptr [lLbound_1],eax
cElements_1 = array_in_out->parray->rgsabound[1].cElements;
mov rax,qword ptr [array_in_out]
mov rax,qword ptr [rax+8]
mov ecx,8
imul rcx,rcx,1
mov eax,dword ptr [rax+rcx+18h]
mov dword ptr [cElements_1],eax
}
if (key_1 < 1 || key_2 < 1 || key_3 < 1) { return E_INVALIDARG; }
cmp dword ptr [key_1],1
jl CVBA::ArraySortS+175h (07FEBADBB775h)
cmp dword ptr [key_2],1
jl CVBA::ArraySortS+175h (07FEBADBB775h)
cmp dword ptr [key_3],1
jge CVBA::ArraySortS+17Fh (07FEBADBB77Fh)
mov eax,80070057h
jmp CVBA::ArraySortS+24FBh (07FEBADBDAFBh)
//if (key_1 > cElements_0 || key_2 > cElements_0 || key_3 > cElements_0) { return E_INVALIDARG; }
//if (lLbound_0 < 0 || lLbound_1 < 0) { return E_INVALIDARG; } //если границы массивы ниже 0
if (cDims == 2 && delete_duplicates) { return E_INVALIDARG; } //&&-и
cmp dword ptr [cDims],2
//if (key_1 > cElements_0 || key_2 > cElements_0 || key_3 > cElements_0) { return E_INVALIDARG; }
//if (lLbound_0 < 0 || lLbound_1 < 0) { return E_INVALIDARG; } //если границы массивы ниже 0
if (cDims == 2 && delete_duplicates) { return E_INVALIDARG; } //&&-и
jne CVBA::ArraySortS+19Ah (07FEBADBB79Ah)
movsx eax,word ptr [delete_duplicates]
test eax,eax
je CVBA::ArraySortS+19Ah (07FEBADBB79Ah)
mov eax,80070057h
jmp CVBA::ArraySortS+24FBh (07FEBADBDAFBh)
if(sort_orientation == 0) {
cmp dword ptr [sort_orientation],0
jne CVBA::ArraySortS+204h (07FEBADBB804h)
if (key_1 > cElements_0) { return E_INVALIDARG; }
mov eax,dword ptr [cElements_0]
cmp dword ptr [key_1],eax
jle CVBA::ArraySortS+1B8h (07FEBADBB7B8h)
mov eax,80070057h
jmp CVBA::ArraySortS+24FBh (07FEBADBDAFBh)
if (key_2 > cElements_0) { return E_INVALIDARG; }
mov eax,dword ptr [cElements_0]
cmp dword ptr [key_2],eax
jle CVBA::ArraySortS+1CDh (07FEBADBB7CDh)
mov eax,80070057h
jmp CVBA::ArraySortS+24FBh (07FEBADBDAFBh)
if (key_3 > cElements_0) { return E_INVALIDARG; }
mov eax,dword ptr [cElements_0]
cmp dword ptr [key_3],eax
jle CVBA::ArraySortS+1E2h (07FEBADBB7E2h)
mov eax,80070057h
jmp CVBA::ArraySortS+24FBh (07FEBADBDAFBh)
if (out_array_index && delete_duplicates) { return E_INVALIDARG; } //&&-и
movsx eax,word ptr [out_array_index]
test eax,eax
je CVBA::ArraySortS+202h (07FEBADBB802h)
movsx eax,word ptr [delete_duplicates]
test eax,eax
je CVBA::ArraySortS+202h (07FEBADBB802h)
mov eax,80070057h
jmp CVBA::ArraySortS+24FBh (07FEBADBDAFBh)
}
jmp CVBA::ArraySortS+275h (07FEBADBB875h)
else if (sort_orientation == 1) {
cmp dword ptr [sort_orientation],1
jne CVBA::ArraySortS+275h (07FEBADBB875h)
if (key_1 > cElements_1) { return E_INVALIDARG; }
mov eax,dword ptr [cElements_1]
cmp dword ptr [key_1],eax
jle CVBA::ArraySortS+225h (07FEBADBB825h)
mov eax,80070057h
jmp CVBA::ArraySortS+24FBh (07FEBADBDAFBh)
if (key_2 > cElements_1) { return E_INVALIDARG; }
mov eax,dword ptr [cElements_1]
cmp dword ptr [key_2],eax
jle CVBA::ArraySortS+23Dh (07FEBADBB83Dh)
mov eax,80070057h
jmp CVBA::ArraySortS+24FBh (07FEBADBDAFBh)
if (key_3 > cElements_1) { return E_INVALIDARG; }
mov eax,dword ptr [cElements_1]
cmp dword ptr [key_3],eax
jle CVBA::ArraySortS+255h (07FEBADBB855h)
mov eax,80070057h
jmp CVBA::ArraySortS+24FBh (07FEBADBDAFBh)
if (out_array_index && delete_duplicates) { return E_INVALIDARG; } //&&-и
movsx eax,word ptr [out_array_index]
test eax,eax
je CVBA::ArraySortS+275h (07FEBADBB875h)
movsx eax,word ptr [delete_duplicates]
test eax,eax
je CVBA::ArraySortS+275h (07FEBADBB875h)
mov eax,80070057h
jmp CVBA::ArraySortS+24FBh (07FEBADBDAFBh)
}
HRESULT hr;
BSTR HUGEP *pbstr;//в с-массив
//hr = SafeArrayLock(array_in_out->parray); //hr = SafeArrayUnlock(array_in_out->parray)
//if (FAILED(hr)) return hr;
hr = SafeArrayAccessData(array_in_out->parray, (void HUGEP**)&pbstr); //открываем массив для редактирования
lea rdx,[pbstr]
mov rax,qword ptr [array_in_out]
mov rcx,qword ptr [rax+8]
call qword ptr [__imp_SafeArrayAccessData (07FEBB0AF6A0h)]
mov dword ptr [hr],eax
if (FAILED(hr)) return hr;
cmp dword ptr [hr],0
jge CVBA::ArraySortS+2A7h (07FEBADBB8A7h)
mov eax,dword ptr [hr]
jmp CVBA::ArraySortS+24FBh (07FEBADBDAFBh)
if (cDims == 1 && !out_array_index && !delete_duplicates) { //если сортировать одномерный массив без вывода индексов и без удаления
cmp dword ptr [cDims],1
jne CVBA::ArraySortS+378h (07FEBADBB978h)
movsx eax,word ptr [out_array_index]
test eax,eax
jne CVBA::ArraySortS+378h (07FEBADBB978h)
movsx eax,word ptr [delete_duplicates]
test eax,eax
jne CVBA::ArraySortS+378h (07FEBADBB978h)
if (!sort_order) { concurrency::parallel_buffered_sort(pbstr, pbstr + cElements_0, comparestring1); }//0.21 сек
movsx eax,word ptr [sort_order]
test eax,eax
jne CVBA::ArraySortS+312h (07FEBADBB912h)
movsxd rax,dword ptr [cElements_0]
mov rcx,qword ptr [pbstr]
lea rax,[rcx+rax*8]
mov qword ptr [rbp+10F8h],rax
mov r9d,800h
lea r8,[comparestring1 (07FEBAD26654h)]
lea rdx,[rbp+10F8h]
lea rcx,[pbstr]
call Concurrency::parallel_buffered_sort<wchar_t * __ptr64 * __ptr64,bool __cdecl(wchar_t * __ptr64,wchar_t * __ptr64)> (07FEBAD24F70h)
jmp CVBA::ArraySortS+348h (07FEBADBB948h)
else { concurrency::parallel_buffered_sort(pbstr, pbstr + cElements_0, comparestring2); }
movsxd rax,dword ptr [cElements_0]
mov rcx,qword ptr [pbstr]
lea rax,[rcx+rax*8]
mov qword ptr [rbp+1118h],rax
mov r9d,800h
lea r8,[comparestring2 (07FEBAD21505h)]
lea rdx,[rbp+1118h]
lea rcx,[pbstr]
call Concurrency::parallel_buffered_sort<wchar_t * __ptr64 * __ptr64,bool __cdecl(wchar_t * __ptr64,wchar_t * __ptr64)> (07FEBAD24F70h)
hr = SafeArrayUnaccessData(array_in_out->parray); //закрываем массив
mov rax,qword ptr [array_in_out]
mov rcx,qword ptr [rax+8]
call qword ptr [__imp_SafeArrayUnaccessData (07FEBB0AF698h)]
mov dword ptr [hr],eax
if (FAILED(hr)) return hr;
cmp dword ptr [hr],0
jge CVBA::ArraySortS+373h (07FEBADBB973h)
mov eax,dword ptr [hr]
jmp CVBA::ArraySortS+24FBh (07FEBADBDAFBh)
}
jmp CVBA::ArraySortS+24F9h (07FEBADBDAF9h)
else if (cDims == 1 && !out_array_index){ //если одномерный массив и не выгружаем индексы, просто сортируем, удаляем
cmp dword ptr [cDims],1
jne CVBA::ArraySortS+555h (07FEBADBBB55h)
movsx eax,word ptr [out_array_index]
test eax,eax
jne CVBA::ArraySortS+555h (07FEBADBBB55h)
if (!sort_order) { concurrency::parallel_buffered_sort(pbstr, pbstr + cElements_0, comparestring1); }
movsx eax,word ptr [sort_order]
test eax,eax
jne CVBA::ArraySortS+3D4h (07FEBADBB9D4h)
movsxd rax,dword ptr [cElements_0]
mov rcx,qword ptr [pbstr]
lea rax,[rcx+rax*8]
mov qword ptr [rbp+1138h],rax
mov r9d,800h
lea r8,[comparestring1 (07FEBAD26654h)]
lea rdx,[rbp+1138h]
lea rcx,[pbstr]
call Concurrency::parallel_buffered_sort<wchar_t * __ptr64 * __ptr64,bool __cdecl(wchar_t * __ptr64,wchar_t * __ptr64)> (07FEBAD24F70h)
jmp CVBA::ArraySortS+40Ah (07FEBADBBA0Ah)
else { concurrency::parallel_buffered_sort(pbstr, pbstr + cElements_0, comparestring2); }
movsxd rax,dword ptr [cElements_0]
mov rcx,qword ptr [pbstr]
lea rax,[rcx+rax*8]
mov qword ptr [rbp+1158h],rax
mov r9d,800h
lea r8,[comparestring2 (07FEBAD21505h)]
lea rdx,[rbp+1158h]
lea rcx,[pbstr]
call Concurrency::parallel_buffered_sort<wchar_t * __ptr64 * __ptr64,bool __cdecl(wchar_t * __ptr64,wchar_t * __ptr64)> (07FEBAD24F70h)
long x=0; //удаляем строки, что бы не текла память, нужно ли что-то еще?
mov dword ptr [rbp+0E4h],0
for (long i = 1; i < cElements_0; ++i)
mov dword ptr [rbp+104h],1
jmp CVBA::ArraySortS+42Eh (07FEBADBBA2Eh)
mov eax,dword ptr [rbp+104h]
inc eax
mov dword ptr [rbp+104h],eax
mov eax,dword ptr [cElements_0]
cmp dword ptr [rbp+104h],eax
jge CVBA::ArraySortS+4BEh (07FEBADBBABEh)
{
if (comparestring3(pbstr[i],pbstr[x])) {
movsxd rax,dword ptr [rbp+0E4h]
movsxd rcx,dword ptr [rbp+104h]
mov rdx,qword ptr [pbstr]
mov rdx,qword ptr [rdx+rax*8]
mov rax,qword ptr [pbstr]
mov rcx,qword ptr [rax+rcx*8]
call comparestring3 (07FEBAD25894h)
movzx eax,al
test eax,eax
je CVBA::ArraySortS+487h (07FEBADBBA87h)
SysFreeString(pbstr[i]);
movsxd rax,dword ptr [rbp+104h]
mov rcx,qword ptr [pbstr]
mov rcx,qword ptr [rcx+rax*8]
call qword ptr [__imp_SysFreeString (07FEBB0AF720h)]
}
else {
jmp CVBA::ArraySortS+4B9h (07FEBADBBAB9h)
pbstr[++x]=pbstr[i];
mov eax,dword ptr [rbp+0E4h]
inc eax
mov dword ptr [rbp+0E4h],eax
movsxd rax,dword ptr [rbp+0E4h]
movsxd rcx,dword ptr [rbp+104h]
mov rdx,qword ptr [pbstr]
mov r8,qword ptr [pbstr]
mov rcx,qword ptr [r8+rcx*8]
mov qword ptr [rdx+rax*8],rcx
}
}
jmp CVBA::ArraySortS+420h (07FEBADBBA20h)
array_in_out->parray->rgsabound[0].cElements = x+1; //меняем количество элементов
mov eax,dword ptr [rbp+0E4h]
inc eax
mov rcx,qword ptr [array_in_out]
mov rcx,qword ptr [rcx+8]
mov edx,8
imul rdx,rdx,0
mov dword ptr [rcx+rdx+18h],eax
hr = SafeArrayUnaccessData(array_in_out->parray); //закрываем массив
mov rax,qword ptr [array_in_out]
mov rcx,qword ptr [rax+8]
call qword ptr [__imp_SafeArrayUnaccessData (07FEBB0AF698h)]
mov dword ptr [hr],eax
if (FAILED(hr)) return hr;
cmp dword ptr [hr],0
jge CVBA::ArraySortS+509h (07FEBADBBB09h)
mov eax,dword ptr [hr]
jmp CVBA::ArraySortS+24FBh (07FEBADBDAFBh)
hr = SafeArrayRedim(array_in_out->parray, &array_in_out->parray->rgsabound[0]); //удаляем лишние
mov rax,qword ptr [array_in_out]
mov rax,qword ptr [rax+8]
mov ecx,8
imul rcx,rcx,0
lea rax,[rax+rcx+18h]
mov rdx,rax
mov rax,qword ptr [array_in_out]
mov rcx,qword ptr [rax+8]
call qword ptr [__imp_SafeArrayRedim (07FEBB0AF6C8h)]
mov dword ptr [hr],eax
if (FAILED(hr)) return hr;
cmp dword ptr [hr],0
jge CVBA::ArraySortS+550h (07FEBADBBB50h)
mov eax,dword ptr [hr]
jmp CVBA::ArraySortS+24FBh (07FEBADBDAFBh)
}
jmp CVBA::ArraySortS+24F9h (07FEBADBDAF9h)
else if (cDims == 1) { //если одномерный массив с сортировкой, удалением и выгружаем индексы
cmp dword ptr [cDims],1
jne CVBA::ArraySortS+96Bh (07FEBADBBF6Bh)
std::vector<str_index> pairs1(cElements_0);
mov edx,20h
lea rcx,[rbp+128h]
call std::vector<str_index,std::allocator<str_index> >::__autoclassinit2 (07FEBAD227E8h)
lea rcx,[rbp+1174h]
call std::allocator<str_index>::allocator<str_index> (07FEBAD27351h)
movsxd rcx,dword ptr [cElements_0]
mov r8,rax
mov rdx,rcx
lea rcx,[rbp+128h]
call std::vector<str_index,std::allocator<str_index> >::vector<str_index,std::allocator<str_index> > (07FEBAD211C7h)
for (size_t i = 0; i < cElements_0; ++i) pairs1[i] = str_index{ i+ lLbound_0, pbstr[i] };
mov qword ptr [rbp+168h],0
jmp CVBA::ArraySortS+5B0h (07FEBADBBBB0h)
mov rax,qword ptr [rbp+168h]
inc rax
mov qword ptr [rbp+168h],rax
movsxd rax,dword ptr [cElements_0]
cmp qword ptr [rbp+168h],rax
jae CVBA::ArraySortS+617h (07FEBADBBC17h)
movsxd rax,dword ptr [lLbound_0]
mov rcx,qword ptr [rbp+168h]
add rcx,rax
mov rax,rcx
mov qword ptr [rbp+1198h],rax
mov rax,qword ptr [pbstr]
mov rcx,qword ptr [rbp+168h]
mov rax,qword ptr [rax+rcx*8]
mov qword ptr [rbp+11A0h],rax
mov rdx,qword ptr [rbp+168h]
lea rcx,[rbp+128h]
call std::vector<str_index,std::allocator<str_index> >::operator[] (07FEBAD2419Ch)
lea rcx,[rbp+1198h]
mov rdi,rax
mov rsi,rcx
mov ecx,10h
rep movs byte ptr [rdi],byte ptr [rsi]
jmp CVBA::ArraySortS+59Fh (07FEBADBBB9Fh)
if (!sort_order) {
movsx eax,word ptr [sort_order]
test eax,eax
jne CVBA::ArraySortS+67Bh (07FEBADBBC7Bh)
concurrency::parallel_buffered_sort(pairs1.begin(), pairs1.end());
lea rdx,[rbp+11C8h]
lea rcx,[rbp+128h]
call std::vector<str_index,std::allocator<str_index> >::end (07FEBAD222F2h)
mov qword ptr [rbp+2198h],rax
lea rdx,[rbp+11F8h]
lea rcx,[rbp+128h]
call std::vector<str_index,std::allocator<str_index> >::begin (07FEBAD25691h)
mov rcx,qword ptr [rbp+2198h]
mov rdx,rcx
mov rcx,rax
call Concurrency::parallel_buffered_sort<std::_Vector_iterator<std::_Vector_val<std::_Simple_types<str_index> > > > (07FEBAD24200h)
lea rcx,[rbp+11F8h]
call std::_Vector_iterator<std::_Vector_val<std::_Simple_types<str_index> > >::~_Vector_iterator<std::_Vector_val<std::_Simple_types<str_index> > > (07FEBAD25A01h)
lea rcx,[rbp+11C8h]
call std::_Vector_iterator<std::_Vector_val<std::_Simple_types<str_index> > >::~_Vector_iterator<std::_Vector_val<std::_Simple_types<str_index> > > (07FEBAD25A01h)
}
else {
jmp CVBA::ArraySortS+6F2h (07FEBADBBCF2h)
concurrency::parallel_buffered_sort(pairs1.begin(), pairs1.end(),
lea rax,[rbp+1224h]
mov rdi,rax
xor eax,eax
mov ecx,1
rep stos byte ptr [rdi]
lea rdx,[rbp+1248h]
lea rcx,[rbp+128h]
call std::vector<str_index,std::allocator<str_index> >::end (07FEBAD222F2h)
mov qword ptr [rbp+2198h],rax
lea rdx,[rbp+1278h]
lea rcx,[rbp+128h]
call std::vector<str_index,std::allocator<str_index> >::begin (07FEBAD25691h)
mov r9d,800h
lea r8,[rbp+1224h]
mov rcx,qword ptr [rbp+2198h]
mov rdx,rcx
mov rcx,rax
call Concurrency::parallel_buffered_sort<std::_Vector_iterator<std::_Vector_val<std::_Simple_types<str_index> > >,<lambda_5db7ddb5e03d1dd124dd799e015f7c6a> > (07FEBAD9AA30h)
lea rcx,[rbp+1278h]
call std::_Vector_iterator<std::_Vector_val<std::_Simple_types<str_index> > >::~_Vector_iterator<std::_Vector_val<std::_Simple_types<str_index> > > (07FEBAD25A01h)
lea rcx,[rbp+1248h]
call std::_Vector_iterator<std::_Vector_val<std::_Simple_types<str_index> > >::~_Vector_iterator<std::_Vector_val<std::_Simple_types<str_index> > > (07FEBAD25A01h)
[]( str_index & l, str_index & r)
{return l > r; });
}
std::vector<long> out1(pairs1.size());
mov edx,20h
lea rcx,[rbp+188h]
call std::vector<long,std::allocator<long> >::__autoclassinit2 (07FEBAD26528h)
lea rcx,[rbp+12A4h]
call std::allocator<long>::allocator<long> (07FEBAD22BA8h)
mov qword ptr [rbp+2198h],rax
lea rcx,[rbp+128h]
call std::vector<str_index,std::allocator<str_index> >::size (07FEBAD26C85h)
mov rcx,qword ptr [rbp+2198h]
mov r8,rcx
mov rdx,rax
lea rcx,[rbp+188h]
call std::vector<long,std::allocator<long> >::vector<long,std::allocator<long> > (07FEBAD21163h)
std::transform(pairs1.begin(), pairs1.end(), out1.begin(), [](const str_index& i) { return i.index; });
lea rax,[rbp+12C4h]
mov rdi,rax
xor eax,eax
mov ecx,1
rep stos byte ptr [rdi]
lea rax,[rbp+12E8h]
mov qword ptr [rbp+1318h],rax
lea rax,[rbp+1338h]
mov qword ptr [rbp+1368h],rax
lea rax,[rbp+1388h]
mov qword ptr [rbp+13B8h],rax
mov rdx,qword ptr [rbp+1318h]
lea rcx,[rbp+188h]
call std::vector<long,std::allocator<long> >::begin (07FEBAD2720Ch)
mov qword ptr [rbp+2198h],rax
mov rdx,qword ptr [rbp+1368h]
lea rcx,[rbp+128h]
call std::vector<str_index,std::allocator<str_index> >::end (07FEBAD222F2h)
mov qword ptr [rbp+21A0h],rax
mov rdx,qword ptr [rbp+13B8h]
lea rcx,[rbp+128h]
call std::vector<str_index,std::allocator<str_index> >::begin (07FEBAD25691h)
movzx ecx,byte ptr [rbp+12C4h]
mov byte ptr [rsp+20h],cl
mov rcx,qword ptr [rbp+2198h]
mov r9,rcx
mov rcx,qword ptr [rbp+21A0h]
mov r8,rcx
mov rdx,rax
lea rcx,[rbp+13D8h]
call std::transform<std::_Vector_iterator<std::_Vector_val<std::_Simple_types<str_index> > >,std::_Vector_iterator<std::_Vector_val<std::_Simple_types<long> > >,<lambda_99b1d02555c7d079e1311a3e3df0b00f> > (07FEBADA1920h)
lea rcx,[rbp+13D8h]
call std::_Vector_iterator<std::_Vector_val<std::_Simple_types<long> > >::~_Vector_iterator<std::_Vector_val<std::_Simple_types<long> > > (07FEBAD2138Eh)
hr = SafeArrayUnaccessData(array_in_out->parray); //закрываем массив
mov rax,qword ptr [array_in_out]
mov rcx,qword ptr [rax+8]
call qword ptr [__imp_SafeArrayUnaccessData (07FEBB0AF698h)]
mov dword ptr [hr],eax
if (FAILED(hr)) return hr;
cmp dword ptr [hr],0
jge CVBA::ArraySortS+848h (07FEBADBBE48h)
mov eax,dword ptr [hr]
mov dword ptr [rbp+1404h],eax
lea rcx,[rbp+188h]
call std::vector<long,std::allocator<long> >::~vector<long,std::allocator<long> > (07FEBAD22036h)
lea rcx,[rbp+128h]
call std::vector<str_index,std::allocator<str_index> >::~vector<str_index,std::allocator<str_index> > (07FEBAD22716h)
mov eax,dword ptr [rbp+1404h]
jmp CVBA::ArraySortS+24FBh (07FEBADBDAFBh)
CComSafeArray <long> outArray1(out1.size(), lLbound_0);
mov edx,8
lea rcx,[rbp+1C8h]
call ATL::CComSafeArray<long,3>::__autoclassinit2 (07FEBAD237A6h)
lea rcx,[rbp+188h]
call std::vector<long,std::allocator<long> >::size (07FEBAD27252h)
mov r8d,dword ptr [lLbound_0]
mov edx,eax
lea rcx,[rbp+1C8h]
call ATL::CComSafeArray<long,3>::CComSafeArray<long,3> (07FEBAD24138h)
for (long i = 0; i < out1.size(); i++) { (long)outArray1[i + lLbound_0] = out1[i]; }
mov dword ptr [rbp+1E4h],0
jmp CVBA::ArraySortS+891h (07FEBADBBE91h)
mov eax,dword ptr [rbp+1E4h]
inc eax
mov dword ptr [rbp+1E4h],eax
movsxd rax,dword ptr [rbp+1E4h]
mov qword ptr [rbp+2198h],rax
lea rcx,[rbp+188h]
call std::vector<long,std::allocator<long> >::size (07FEBAD27252h)
mov rcx,qword ptr [rbp+2198h]
cmp rcx,rax
jae CVBA::ArraySortS+8FCh (07FEBADBBEFCh)
movsxd rax,dword ptr [rbp+1E4h]
mov rdx,rax
lea rcx,[rbp+188h]
call std::vector<long,std::allocator<long> >::operator[] (07FEBAD2869Dh)
mov qword ptr [rbp+2198h],rax
mov ecx,dword ptr [lLbound_0]
mov edx,dword ptr [rbp+1E4h]
add edx,ecx
mov ecx,edx
mov edx,ecx
lea rcx,[rbp+1C8h]
call ATL::CComSafeArray<long,3>::operator[] (07FEBAD23391h)
mov rcx,qword ptr [rbp+2198h]
mov ecx,dword ptr [rcx]
mov dword ptr [rax],ecx
jmp CVBA::ArraySortS+883h (07FEBADBBE83h)
CComVariant varOut(outArray1);
lea rcx,[rbp+1C8h]
call ATL::CComSafeArray<long,3>::operator tagSAFEARRAY * __ptr64 (07FEBAD297EBh)
mov rdx,rax
lea rcx,[rbp+208h]
call ATL::CComVariant::CComVariant (07FEBAD22E73h)
varOut.Detach(index_array_out);
mov rdx,qword ptr [index_array_out]
varOut.Detach(index_array_out);
lea rcx,[rbp+208h]
call ATL::CComVariant::Detach (07FEBAD285ADh)
outArray1.Destroy();
lea rcx,[rbp+1C8h]
call ATL::CComSafeArray<long,3>::Destroy (07FEBAD218A2h)
}
lea rcx,[rbp+208h]
call ATL::CComVariant::~CComVariant (07FEBAD258B2h)
lea rcx,[rbp+1C8h]
call ATL::CComSafeArray<long,3>::~CComSafeArray<long,3> (07FEBAD25A1Ah)
lea rcx,[rbp+188h]
call std::vector<long,std::allocator<long> >::~vector<long,std::allocator<long> > (07FEBAD22036h)
lea rcx,[rbp+128h]
call std::vector<str_index,std::allocator<str_index> >::~vector<str_index,std::allocator<str_index> > (07FEBAD22716h)
jmp CVBA::ArraySortS+24F9h (07FEBADBDAF9h)
else if (sort_orientation == 2) {//сортировка по всему двухмерному массиву строка-столбец
cmp dword ptr [sort_orientation],2
jne CVBA::ArraySortS+0A31h (07FEBADBC031h)
if (!sort_order) { concurrency::parallel_buffered_sort(pbstr, pbstr + cElements_0 * cElements_1, comparestring1); } //0.21 сек
movsx eax,word ptr [sort_order]
test eax,eax
jne CVBA::ArraySortS+9C3h (07FEBADBBFC3h)
mov eax,dword ptr [cElements_0]
imul eax,dword ptr [cElements_1]
cdqe
mov rcx,qword ptr [pbstr]
lea rax,[rcx+rax*8]
mov qword ptr [rbp+1428h],rax
mov r9d,800h
lea r8,[comparestring1 (07FEBAD26654h)]
lea rdx,[rbp+1428h]
lea rcx,[pbstr]
call Concurrency::parallel_buffered_sort<wchar_t * __ptr64 * __ptr64,bool __cdecl(wchar_t * __ptr64,wchar_t * __ptr64)> (07FEBAD24F70h)
jmp CVBA::ArraySortS+0A01h (07FEBADBC001h)
else { concurrency::parallel_buffered_sort(pbstr, pbstr + cElements_0 * cElements_1, comparestring2); }
mov eax,dword ptr [cElements_0]
imul eax,dword ptr [cElements_1]
cdqe
mov rcx,qword ptr [pbstr]
lea rax,[rcx+rax*8]
mov qword ptr [rbp+1448h],rax
mov r9d,800h
lea r8,[comparestring2 (07FEBAD21505h)]
lea rdx,[rbp+1448h]
lea rcx,[pbstr]
call Concurrency::parallel_buffered_sort<wchar_t * __ptr64 * __ptr64,bool __cdecl(wchar_t * __ptr64,wchar_t * __ptr64)> (07FEBAD24F70h)
hr = SafeArrayUnaccessData(array_in_out->parray); //закрываем массив
mov rax,qword ptr [array_in_out]
mov rcx,qword ptr [rax+8]
call qword ptr [__imp_SafeArrayUnaccessData (07FEBB0AF698h)]
mov dword ptr [hr],eax
if (FAILED(hr)) return hr;
cmp dword ptr [hr],0
jge CVBA::ArraySortS+0A2Ch (07FEBADBC02Ch)
mov eax,dword ptr [hr]
jmp CVBA::ArraySortS+24FBh (07FEBADBDAFBh)
}
jmp CVBA::ArraySortS+24F9h (07FEBADBDAF9h)
else if (sort_orientation == 3) { ////сортировка по всему двухмерному массиву столбец-строка)
cmp dword ptr [sort_orientation],3
jne CVBA::ArraySortS+0C7Ch (07FEBADBC27Ch)
long cElements_full = cElements_0 * cElements_1;
mov eax,dword ptr [cElements_0]
imul eax,dword ptr [cElements_1]
mov dword ptr [rbp+234h],eax
std::vector <BSTR> vBSTR(pbstr, pbstr + cElements_full); //передаем в вектор
mov edx,20h
lea rcx,[rbp+258h]
call std::vector<wchar_t * __ptr64,std::allocator<wchar_t * __ptr64> >::__autoclassinit2 (07FEBAD23A1Ch)
lea rcx,[rbp+1464h]
call std::allocator<wchar_t * __ptr64>::allocator<wchar_t * __ptr64> (07FEBAD2318Eh)
movsxd rcx,dword ptr [rbp+234h]
mov rdx,qword ptr [pbstr]
lea rcx,[rdx+rcx*8]
mov r9,rax
mov r8,rcx
mov rdx,qword ptr [pbstr]
lea rcx,[rbp+258h]
call std::vector<wchar_t * __ptr64,std::allocator<wchar_t * __ptr64> >::vector<wchar_t * __ptr64,std::allocator<wchar_t * __ptr64> ><wchar_t * __ptr64 * __ptr64,void> (07FEBAD22CE8h)
if (!sort_order) concurrency::parallel_buffered_sort(vBSTR.begin(), vBSTR.end(), comparestring1); //0.23(0.30) сек
movsx eax,word ptr [sort_order]
test eax,eax
jne CVBA::ArraySortS+0B07h (07FEBADBC107h)
lea rdx,[rbp+1488h]
lea rcx,[rbp+258h]
call std::vector<wchar_t * __ptr64,std::allocator<wchar_t * __ptr64> >::end (07FEBAD2352Bh)
mov qword ptr [rbp+2198h],rax
lea rdx,[rbp+14B8h]
lea rcx,[rbp+258h]
call std::vector<wchar_t * __ptr64,std::allocator<wchar_t * __ptr64> >::begin (07FEBAD220F4h)
mov r9d,800h
lea r8,[comparestring1 (07FEBAD26654h)]
mov rcx,qword ptr [rbp+2198h]
mov rdx,rcx
mov rcx,rax
call Concurrency::parallel_buffered_sort<std::_Vector_iterator<std::_Vector_val<std::_Simple_types<wchar_t * __ptr64> > >,bool __cdecl(wchar_t * __ptr64,wchar_t * __ptr64)> (07FEBAD24E21h)
lea rcx,[rbp+14B8h]
call std::_Vector_iterator<std::_Vector_val<std::_Simple_types<wchar_t * __ptr64> > >::~_Vector_iterator<std::_Vector_val<std::_Simple_types<wchar_t * __ptr64> > > (07FEBAD210E1h)
lea rcx,[rbp+1488h]
call std::_Vector_iterator<std::_Vector_val<std::_Simple_types<wchar_t * __ptr64> > >::~_Vector_iterator<std::_Vector_val<std::_Simple_types<wchar_t * __ptr64> > > (07FEBAD210E1h)
jmp CVBA::ArraySortS+0B6Bh (07FEBADBC16Bh)
else concurrency::parallel_buffered_sort(vBSTR.begin(), vBSTR.end(), comparestring2);
lea rdx,[rbp+14E8h]
lea rcx,[rbp+258h]
call std::vector<wchar_t * __ptr64,std::allocator<wchar_t * __ptr64> >::end (07FEBAD2352Bh)
mov qword ptr [rbp+2198h],rax
lea rdx,[rbp+1518h]
lea rcx,[rbp+258h]
call std::vector<wchar_t * __ptr64,std::allocator<wchar_t * __ptr64> >::begin (07FEBAD220F4h)
mov r9d,800h
lea r8,[comparestring2 (07FEBAD21505h)]
mov rcx,qword ptr [rbp+2198h]
mov rdx,rcx
mov rcx,rax
call Concurrency::parallel_buffered_sort<std::_Vector_iterator<std::_Vector_val<std::_Simple_types<wchar_t * __ptr64> > >,bool __cdecl(wchar_t * __ptr64,wchar_t * __ptr64)> (07FEBAD24E21h)
lea rcx,[rbp+1518h]
call std::_Vector_iterator<std::_Vector_val<std::_Simple_types<wchar_t * __ptr64> > >::~_Vector_iterator<std::_Vector_val<std::_Simple_types<wchar_t * __ptr64> > > (07FEBAD210E1h)
lea rcx,[rbp+14E8h]
call std::_Vector_iterator<std::_Vector_val<std::_Simple_types<wchar_t * __ptr64> > >::~_Vector_iterator<std::_Vector_val<std::_Simple_types<wchar_t * __ptr64> > > (07FEBAD210E1h)
long iTmp = 0;
mov dword ptr [rbp+294h],0
for (long i = 0; i < cElements_1; i++) {
mov dword ptr [rbp+2B4h],0
for (long i = 0; i < cElements_1; i++) {
jmp CVBA::ArraySortS+0B8Fh (07FEBADBC18Fh)
mov eax,dword ptr [rbp+2B4h]
inc eax
mov dword ptr [rbp+2B4h],eax
mov eax,dword ptr [cElements_1]
cmp dword ptr [rbp+2B4h],eax
jge CVBA::ArraySortS+0C28h (07FEBADBC228h)
for (long j = 0; j < cElements_full; j=j+cElements_1) {
mov dword ptr [rbp+2D4h],0
jmp CVBA::ArraySortS+0BC3h (07FEBADBC1C3h)
mov eax,dword ptr [cElements_1]
mov ecx,dword ptr [rbp+2D4h]
add ecx,eax
mov eax,ecx
mov dword ptr [rbp+2D4h],eax
mov eax,dword ptr [rbp+234h]
cmp dword ptr [rbp+2D4h],eax
jge CVBA::ArraySortS+0C23h (07FEBADBC223h)
pbstr[j+i] = vBSTR[iTmp++];//iTmp++;
movsxd rax,dword ptr [rbp+294h]
mov qword ptr [rbp+2198h],rax
mov eax,dword ptr [rbp+294h]
inc eax
mov dword ptr [rbp+294h],eax
mov rdx,qword ptr [rbp+2198h]
lea rcx,[rbp+258h]
call std::vector<wchar_t * __ptr64,std::allocator<wchar_t * __ptr64> >::operator[] (07FEBAD254A7h)
mov ecx,dword ptr [rbp+2B4h]
mov edx,dword ptr [rbp+2D4h]
add edx,ecx
mov ecx,edx
movsxd rcx,ecx
mov rdx,qword ptr [pbstr]
mov rax,qword ptr [rax]
mov qword ptr [rdx+rcx*8],rax
}
jmp CVBA::ArraySortS+0BADh (07FEBADBC1ADh)
}
jmp CVBA::ArraySortS+0B81h (07FEBADBC181h)
hr = SafeArrayUnaccessData(array_in_out->parray); //закрываем массив
mov rax,qword ptr [array_in_out]
mov rcx,qword ptr [rax+8]
call qword ptr [__imp_SafeArrayUnaccessData (07FEBB0AF698h)]
mov dword ptr [hr],eax
if (FAILED(hr)) return hr;
cmp dword ptr [hr],0
jge CVBA::ArraySortS+0C6Bh (07FEBADBC26Bh)
mov eax,dword ptr [hr]
mov dword ptr [rbp+1544h],eax
lea rcx,[rbp+258h]
call std::vector<wchar_t * __ptr64,std::allocator<wchar_t * __ptr64> >::~vector<wchar_t * __ptr64,std::allocator<wchar_t * __ptr64> > (07FEBAD2596Bh)
mov eax,dword ptr [rbp+1544h]
jmp CVBA::ArraySortS+24FBh (07FEBADBDAFBh)
}
lea rcx,[rbp+258h]
call std::vector<wchar_t * __ptr64,std::allocator<wchar_t * __ptr64> >::~vector<wchar_t * __ptr64,std::allocator<wchar_t * __ptr64> > (07FEBAD2596Bh)
jmp CVBA::ArraySortS+24F9h (07FEBADBDAF9h)
else if ((key_2 == 1 && key_3 == 1)||((key_1 == key_2) && (key_2 == key_3))) { //если одно условие
cmp dword ptr [key_2],1
jne CVBA::ArraySortS+0C8Eh (07FEBADBC28Eh)
cmp dword ptr [key_3],1
je CVBA::ArraySortS+0CB2h (07FEBADBC2B2h)
mov eax,dword ptr [key_2]
cmp dword ptr [key_1],eax
jne CVBA::ArraySortS+1781h (07FEBADBCD81h)
mov eax,dword ptr [key_3]
cmp dword ptr [key_2],eax
jne CVBA::ArraySortS+1781h (07FEBADBCD81h)
if (sort_orientation == 0) { //если сортировка по строкам
cmp dword ptr [sort_orientation],0
jne CVBA::ArraySortS+121Ah (07FEBADBC81Ah)
//if (key_1 == 1) key_1 = lLbound_0;
long offset = (key_1 - 1)*cElements_1; //сдвигаем на заданную размерность
mov eax,dword ptr [key_1]
dec eax
imul eax,dword ptr [cElements_1]
mov dword ptr [rbp+2F4h],eax
std::vector<str_index> pairs2(cElements_1);
mov edx,20h
lea rcx,[rbp+318h]
call std::vector<str_index,std::allocator<str_index> >::__autoclassinit2 (07FEBAD227E8h)
lea rcx,[rbp+1564h]
call std::allocator<str_index>::allocator<str_index> (07FEBAD27351h)
movsxd rcx,dword ptr [cElements_1]
mov r8,rax
mov rdx,rcx
lea rcx,[rbp+318h]
call std::vector<str_index,std::allocator<str_index> >::vector<str_index,std::allocator<str_index> > (07FEBAD211C7h)
for (size_t i = 0; i < cElements_1; ++i) pairs2[i] = str_index{ i, pbstr[i+ offset] }; //сдвигаем на заданную размерность
mov qword ptr [rbp+358h],0
jmp CVBA::ArraySortS+0D28h (07FEBADBC328h)
mov rax,qword ptr [rbp+358h]
inc rax
mov qword ptr [rbp+358h],rax
movsxd rax,dword ptr [cElements_1]
cmp qword ptr [rbp+358h],rax
jae CVBA::ArraySortS+0D95h (07FEBADBC395h)
mov rax,qword ptr [rbp+358h]
mov qword ptr [rbp+1588h],rax
movsxd rax,dword ptr [rbp+2F4h]
mov rcx,qword ptr [rbp+358h]
add rcx,rax
mov rax,rcx
mov rcx,qword ptr [pbstr]
mov rax,qword ptr [rcx+rax*8]
mov qword ptr [rbp+1590h],rax
mov rdx,qword ptr [rbp+358h]
lea rcx,[rbp+318h]
call std::vector<str_index,std::allocator<str_index> >::operator[] (07FEBAD2419Ch)
lea rcx,[rbp+1588h]
mov rdi,rax
mov rsi,rcx
mov ecx,10h
rep movs byte ptr [rdi],byte ptr [rsi]
jmp CVBA::ArraySortS+0D17h (07FEBADBC317h)
if (!sort_order) {
movsx eax,word ptr [sort_order]
test eax,eax
jne CVBA::ArraySortS+0DF9h (07FEBADBC3F9h)
concurrency::parallel_buffered_sort(pairs2.begin(), pairs2.end());
lea rdx,[rbp+15B8h]
lea rcx,[rbp+318h]
call std::vector<str_index,std::allocator<str_index> >::end (07FEBAD222F2h)
mov qword ptr [rbp+2198h],rax
lea rdx,[rbp+15E8h]
lea rcx,[rbp+318h]
call std::vector<str_index,std::allocator<str_index> >::begin (07FEBAD25691h)
mov rcx,qword ptr [rbp+2198h]
mov rdx,rcx
mov rcx,rax
call Concurrency::parallel_buffered_sort<std::_Vector_iterator<std::_Vector_val<std::_Simple_types<str_index> > > > (07FEBAD24200h)
lea rcx,[rbp+15E8h]
call std::_Vector_iterator<std::_Vector_val<std::_Simple_types<str_index> > >::~_Vector_iterator<std::_Vector_val<std::_Simple_types<str_index> > > (07FEBAD25A01h)
lea rcx,[rbp+15B8h]
call std::_Vector_iterator<std::_Vector_val<std::_Simple_types<str_index> > >::~_Vector_iterator<std::_Vector_val<std::_Simple_types<str_index> > > (07FEBAD25A01h)
}
else {
jmp CVBA::ArraySortS+0E70h (07FEBADBC470h)
concurrency::parallel_buffered_sort(pairs2.begin(), pairs2.end(),
lea rax,[rbp+1614h]
mov rdi,rax
xor eax,eax
mov ecx,1
rep stos byte ptr [rdi]
lea rdx,[rbp+1638h]
lea rcx,[rbp+318h]
call std::vector<str_index,std::allocator<str_index> >::end (07FEBAD222F2h)
mov qword ptr [rbp+2198h],rax
lea rdx,[rbp+1668h]
lea rcx,[rbp+318h]
call std::vector<str_index,std::allocator<str_index> >::begin (07FEBAD25691h)
mov r9d,800h
lea r8,[rbp+1614h]
mov rcx,qword ptr [rbp+2198h]
mov rdx,rcx
mov rcx,rax
call Concurrency::parallel_buffered_sort<std::_Vector_iterator<std::_Vector_val<std::_Simple_types<str_index> > >,<lambda_3ff31a8ceb71d5bff65ebfad7292e824> > (07FEBAD9A910h)
lea rcx,[rbp+1668h]
call std::_Vector_iterator<std::_Vector_val<std::_Simple_types<str_index> > >::~_Vector_iterator<std::_Vector_val<std::_Simple_types<str_index> > > (07FEBAD25A01h)
lea rcx,[rbp+1638h]
call std::_Vector_iterator<std::_Vector_val<std::_Simple_types<str_index> > >::~_Vector_iterator<std::_Vector_val<std::_Simple_types<str_index> > > (07FEBAD25A01h)
[](str_index & l, str_index & r)
{return l > r; });
}
std::vector<long> out2(pairs2.size());
mov edx,20h
lea rcx,[rbp+378h]
call std::vector<long,std::allocator<long> >::__autoclassinit2 (07FEBAD26528h)
lea rcx,[rbp+1694h]
call std::allocator<long>::allocator<long> (07FEBAD22BA8h)
mov qword ptr [rbp+2198h],rax
lea rcx,[rbp+318h]
call std::vector<str_index,std::allocator<str_index> >::size (07FEBAD26C85h)
mov rcx,qword ptr [rbp+2198h]
mov r8,rcx
mov rdx,rax
lea rcx,[rbp+378h]
call std::vector<long,std::allocator<long> >::vector<long,std::allocator<long> > (07FEBAD21163h)
std::transform(pairs2.begin(), pairs2.end(), out2.begin(), [](const str_index& i) { return i.index; });
lea rax,[rbp+16B4h]
mov rdi,rax
xor eax,eax
mov ecx,1
rep stos byte ptr [rdi]
lea rax,[rbp+16D8h]
mov qword ptr [rbp+1708h],rax
lea rax,[rbp+1728h]
mov qword ptr [rbp+1758h],rax
lea rax,[rbp+1778h]
mov qword ptr [rbp+17A8h],rax
mov rdx,qword ptr [rbp+1708h]
lea rcx,[rbp+378h]
call std::vector<long,std::allocator<long> >::begin (07FEBAD2720Ch)
mov qword ptr [rbp+2198h],rax
mov rdx,qword ptr [rbp+1758h]
lea rcx,[rbp+318h]
call std::vector<str_index,std::allocator<str_index> >::end (07FEBAD222F2h)
mov qword ptr [rbp+21A0h],rax
mov rdx,qword ptr [rbp+17A8h]
lea rcx,[rbp+318h]
call std::vector<str_index,std::allocator<str_index> >::begin (07FEBAD25691h)
movzx ecx,byte ptr [rbp+16B4h]
mov byte ptr [rsp+20h],cl
mov rcx,qword ptr [rbp+2198h]
mov r9,rcx
mov rcx,qword ptr [rbp+21A0h]
mov r8,rcx
mov rdx,rax
lea rcx,[rbp+17C8h]
call std::transform<std::_Vector_iterator<std::_Vector_val<std::_Simple_types<str_index> > >,std::_Vector_iterator<std::_Vector_val<std::_Simple_types<long> > >,<lambda_779da7766fc96015bbeae79d102bf2e3> > (07FEBADA1730h)
lea rcx,[rbp+17C8h]
call std::_Vector_iterator<std::_Vector_val<std::_Simple_types<long> > >::~_Vector_iterator<std::_Vector_val<std::_Simple_types<long> > > (07FEBAD2138Eh)
if (out_array_index) { //выводим индексы
movsx eax,word ptr [out_array_index]
test eax,eax
je CVBA::ArraySortS+1092h (07FEBADBC692h)
CComSafeArray <long> outArray2(out2.size(), lLbound_1);
mov edx,8
lea rcx,[rbp+3B8h]
call ATL::CComSafeArray<long,3>::__autoclassinit2 (07FEBAD237A6h)
lea rcx,[rbp+378h]
call std::vector<long,std::allocator<long> >::size (07FEBAD27252h)
mov r8d,dword ptr [lLbound_1]
mov edx,eax
lea rcx,[rbp+3B8h]
call ATL::CComSafeArray<long,3>::CComSafeArray<long,3> (07FEBAD24138h)
for (long i = 0; i < out2.size(); i++) outArray2[i + lLbound_1] = out2[i]+ lLbound_1;
mov dword ptr [rbp+3D4h],0
jmp CVBA::ArraySortS+0FCFh (07FEBADBC5CFh)
mov eax,dword ptr [rbp+3D4h]
inc eax
mov dword ptr [rbp+3D4h],eax
movsxd rax,dword ptr [rbp+3D4h]
mov qword ptr [rbp+2198h],rax
lea rcx,[rbp+378h]
call std::vector<long,std::allocator<long> >::size (07FEBAD27252h)
mov rcx,qword ptr [rbp+2198h]
cmp rcx,rax
jae CVBA::ArraySortS+103Bh (07FEBADBC63Bh)
movsxd rax,dword ptr [rbp+3D4h]
mov rdx,rax
lea rcx,[rbp+378h]
call std::vector<long,std::allocator<long> >::operator[] (07FEBAD2869Dh)
mov eax,dword ptr [rax]
add eax,dword ptr [lLbound_1]
mov dword ptr [rbp+2194h],eax
mov ecx,dword ptr [lLbound_1]
mov edx,dword ptr [rbp+3D4h]
add edx,ecx
mov ecx,edx
mov edx,ecx
lea rcx,[rbp+3B8h]
call ATL::CComSafeArray<long,3>::operator[] (07FEBAD23391h)
mov ecx,dword ptr [rbp+2194h]
mov dword ptr [rax],ecx
jmp CVBA::ArraySortS+0FC1h (07FEBADBC5C1h)
CComVariant varOut(outArray2);
lea rcx,[rbp+3B8h]
call ATL::CComSafeArray<long,3>::operator tagSAFEARRAY * __ptr64 (07FEBAD297EBh)
mov rdx,rax
lea rcx,[rbp+3F8h]
call ATL::CComVariant::CComVariant (07FEBAD22E73h)
varOut.Detach(index_array_out);
mov rdx,qword ptr [index_array_out]
lea rcx,[rbp+3F8h]
call ATL::CComVariant::Detach (07FEBAD285ADh)
outArray2.Destroy();
lea rcx,[rbp+3B8h]
call ATL::CComSafeArray<long,3>::Destroy (07FEBAD218A2h)
}
lea rcx,[rbp+3F8h]
call ATL::CComVariant::~CComVariant (07FEBAD258B2h)
lea rcx,[rbp+3B8h]
call ATL::CComSafeArray<long,3>::~CComSafeArray<long,3> (07FEBAD25A1Ah)
else { //сортируем двухмерный массив поодному из измерений (столбец - сортировка строк)
jmp CVBA::ArraySortS+11AEh (07FEBADBC7AEh)
long cElements_full2 = cElements_0 * cElements_1;
mov eax,dword ptr [cElements_0]
imul eax,dword ptr [cElements_1]
mov dword ptr [rbp+424h],eax
std::vector <BSTR> vBSTR(pbstr, pbstr + cElements_full2); //передаем в вектор
mov edx,20h
lea rcx,[rbp+448h]
call std::vector<wchar_t * __ptr64,std::allocator<wchar_t * __ptr64> >::__autoclassinit2 (07FEBAD23A1Ch)
lea rcx,[rbp+17F4h]
call std::allocator<wchar_t * __ptr64>::allocator<wchar_t * __ptr64> (07FEBAD2318Eh)
movsxd rcx,dword ptr [rbp+424h]
mov rdx,qword ptr [pbstr]
lea rcx,[rdx+rcx*8]
mov r9,rax
mov r8,rcx
mov rdx,qword ptr [pbstr]
lea rcx,[rbp+448h]
call std::vector<wchar_t * __ptr64,std::allocator<wchar_t * __ptr64> >::vector<wchar_t * __ptr64,std::allocator<wchar_t * __ptr64> ><wchar_t * __ptr64 * __ptr64,void> (07FEBAD22CE8h)
for (long i = 0; i < cElements_0; i++) {
mov dword ptr [rbp+484h],0
jmp CVBA::ArraySortS+1104h (07FEBADBC704h)
mov eax,dword ptr [rbp+484h]
inc eax
mov dword ptr [rbp+484h],eax
mov eax,dword ptr [cElements_0]
cmp dword ptr [rbp+484h],eax
jge CVBA::ArraySortS+11A2h (07FEBADBC7A2h)
for (long j = 0; j < cElements_1; j++) {
mov dword ptr [rbp+4A4h],0
for (long j = 0; j < cElements_1; j++) {
jmp CVBA::ArraySortS+112Dh (07FEBADBC72Dh)
mov eax,dword ptr [rbp+4A4h]
inc eax
mov dword ptr [rbp+4A4h],eax
mov eax,dword ptr [cElements_1]
cmp dword ptr [rbp+4A4h],eax
jge CVBA::ArraySortS+119Dh (07FEBADBC79Dh)
pbstr[j + i * cElements_1] = vBSTR[out2[j] + i * cElements_1];
movsxd rax,dword ptr [rbp+4A4h]
mov rdx,rax
lea rcx,[rbp+378h]
call std::vector<long,std::allocator<long> >::operator[] (07FEBAD2869Dh)
mov ecx,dword ptr [rbp+484h]
imul ecx,dword ptr [cElements_1]
mov eax,dword ptr [rax]
add eax,ecx
cdqe
mov rdx,rax
lea rcx,[rbp+448h]
call std::vector<wchar_t * __ptr64,std::allocator<wchar_t * __ptr64> >::operator[] (07FEBAD254A7h)
mov ecx,dword ptr [rbp+484h]
imul ecx,dword ptr [cElements_1]
mov edx,dword ptr [rbp+4A4h]
add edx,ecx
mov ecx,edx
movsxd rcx,ecx
mov rdx,qword ptr [pbstr]
mov rax,qword ptr [rax]
mov qword ptr [rdx+rcx*8],rax
}
jmp CVBA::ArraySortS+111Fh (07FEBADBC71Fh)
}
jmp CVBA::ArraySortS+10F6h (07FEBADBC6F6h)
}
lea rcx,[rbp+448h]
call std::vector<wchar_t * __ptr64,std::allocator<wchar_t * __ptr64> >::~vector<wchar_t * __ptr64,std::allocator<wchar_t * __ptr64> > (07FEBAD2596Bh)
hr = SafeArrayUnaccessData(array_in_out->parray); //закрываем массив
mov rax,qword ptr [array_in_out]
mov rcx,qword ptr [rax+8]
call qword ptr [__imp_SafeArrayUnaccessData (07FEBB0AF698h)]
mov dword ptr [hr],eax
if (FAILED(hr)) return hr;
cmp dword ptr [hr],0
jge CVBA::ArraySortS+11FDh (07FEBADBC7FDh)
mov eax,dword ptr [hr]
mov dword ptr [rbp+1814h],eax
lea rcx,[rbp+378h]
call std::vector<long,std::allocator<long> >::~vector<long,std::allocator<long> > (07FEBAD22036h)
lea rcx,[rbp+318h]
call std::vector<str_index,std::allocator<str_index> >::~vector<str_index,std::allocator<str_index> > (07FEBAD22716h)
mov eax,dword ptr [rbp+1814h]
jmp CVBA::ArraySortS+24FBh (07FEBADBDAFBh)
}
lea rcx,[rbp+378h]
call std::vector<long,std::allocator<long> >::~vector<long,std::allocator<long> > (07FEBAD22036h)
lea rcx,[rbp+318h]
call std::vector<str_index,std::allocator<str_index> >::~vector<str_index,std::allocator<str_index> > (07FEBAD22716h)
jmp CVBA::ArraySortS+177Ch (07FEBADBCD7Ch)
else if (sort_orientation == 1) { //если сортировка по столбцам
cmp dword ptr [sort_orientation],1
jne CVBA::ArraySortS+177Ch (07FEBADBCD7Ch)
//if (key_1 == -1) key_1 = lLbound_1;
long offset = (key_1 - 1); //сдвигаем на заданную размерность
mov eax,dword ptr [key_1]
//if (key_1 == -1) key_1 = lLbound_1;
long offset = (key_1 - 1); //сдвигаем на заданную размерность
dec eax
mov dword ptr [rbp+4C4h],eax
std::vector<str_index> pairs2(cElements_0);
mov edx,20h
lea rcx,[rbp+4E8h]
call std::vector<str_index,std::allocator<str_index> >::__autoclassinit2 (07FEBAD227E8h)
lea rcx,[rbp+1834h]
call std::allocator<str_index>::allocator<str_index> (07FEBAD27351h)
movsxd rcx,dword ptr [cElements_0]
mov r8,rax
mov rdx,rcx
lea rcx,[rbp+4E8h]
|