// File: /workspace/github_cpp_makefile_star2_O1/EduBic[P]TSP-MetaheuristicSolvers/solversexecutor.cpp
// Function: SolversExecutor::printResults() const
void SolversExecutor::printResults() const {
    std::cout << "----------------------------------------------------------------------" << std::endl;

    TSPSolution* bestSolutionFound;
    std::vector<TSPSolution*> bestSolutionsFound;
    double bestValue = 1e10;

    for (vector<TSPSolution*>::const_iterator it = mBestSolutions.begin(); it != mBestSolutions.end(); ++it) {
        double value = (*it)->evaluateObjectiveFunction(mTspInstance);

        if (value < bestValue) {
            bestValue = value;
            bestSolutionFound = *it;
        }

        if (value <= bestValue) {
            bestSolutionsFound.push_back(*it);
        }

        std::cout << std::endl << (*it)->solveBy << std::endl;
        std::cout << "(value : " << value << ")\n";
        std::cout << "sec. (user time) " << (*it)->userTime << std::endl;
        std::cout << "sec. (CPU time) " << (*it)->cpuTime << std::endl;
        cout << "Max iterations " << (*it)->iterations << endl;
    }

    if (mBestSolutions.size() > 1) {

        std::cout << "------------------------------- THE WINNER -------------------------------------" << std::endl;

        std::cout << std::endl << bestSolutionFound->solveBy << std::endl;
        std::cout << "(value : " << bestValue << ")\n";
        std::cout << "sec. (user time) " << bestSolutionFound->userTime << std::endl;
        std::cout << "sec. (CPU time) " << bestSolutionFound->cpuTime << std::endl;

        std::cout << "------------------------------- THE WINNERS -------------------------------------" << std::endl;

        for (vector<TSPSolution*>::const_iterator it = bestSolutionsFound.begin(); it != bestSolutionsFound.end(); ++it) {
            double value = (*it)->evaluateObjectiveFunction(mTspInstance);

            std::cout << std::endl << (*it)->solveBy << std::endl;
            std::cout << "(value : " << value << ")\n";
            std::cout << "sec. (user time) " << (*it)->userTime << std::endl;
            std::cout << "sec. (CPU time) " << (*it)->cpuTime << std::endl;
        }
    }

    cout << endl;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x38, %rsp
movq %rdi, %r14
movq 0x66ea(%rip), %rbx      # 0xafd0
leaq 0x37e3(%rip), %rsi      # 0x80d0
movl $0x46, %edx
movq %rbx, %rdi
callq 0x32f0
movq (%rbx), %rax
movq -0x18(%rax), %rdi
addq %rbx, %rdi
movl $0xa, %esi
callq 0x32b0
movsbl %al, %esi
movq %rbx, %rdi
callq 0x3030
movq %rax, %rdi
callq 0x31f0
xorpd %xmm0, %xmm0
movapd %xmm0, 0x10(%rsp)
movq $0x0, 0x20(%rsp)
movq 0x48(%r14), %r15
movq 0x50(%r14), %rax
cmpq %rax, %r15
je 0x4b7c
movsd 0x36f3(%rip), %xmm0     # 0x8040
leaq 0x37f3(%rip), %r13      # 0x8147
movq (%r15), %rax
movq (%rax), %rcx
movq 0x8(%rax), %rdx
subq %rcx, %rdx
sarq $0x2, %rdx
decq %rdx
je 0x4997
movq 0x10(%r14), %rsi
xorpd %xmm2, %xmm2
xorl %edi, %edi
movslq (%rcx,%rdi,4), %r8
incq %rdi
movl %edi, %r9d
movslq (%rcx,%r9,4), %r10
leaq (%r8,%r8,2), %r8
movq (%rsi,%r8,8), %r8
addsd (%r8,%r10,8), %xmm2
cmpq %r9, %rdx
ja 0x4974
jmp 0x499b
xorpd %xmm2, %xmm2
ucomisd %xmm2, %xmm0
cmovaq %rax, %r12
movapd %xmm2, %xmm1
minsd %xmm0, %xmm1
movsd %xmm1, 0x8(%rsp)
movsd %xmm2, 0x30(%rsp)
ucomisd %xmm2, %xmm1
jb 0x49e1
movq 0x18(%rsp), %rsi
cmpq 0x20(%rsp), %rsi
je 0x49d4
movq %rax, (%rsi)
addq $0x8, 0x18(%rsp)
jmp 0x49e1
leaq 0x10(%rsp), %rdi
movq %r15, %rdx
callq 0x5b24
movq (%rbx), %rax
movq -0x18(%rax), %rdi
addq %rbx, %rdi
movl $0xa, %esi
callq 0x32b0
movsbl %al, %esi
movq %rbx, %rdi
callq 0x3030
movq %rax, %rdi
callq 0x31f0
movq (%r15), %rcx
movq 0x18(%rcx), %rsi
movq 0x20(%rcx), %rdx
movq %rax, %rdi
callq 0x32f0
movq %rax, %rbp
movq (%rax), %rax
movq -0x18(%rax), %rdi
addq %rbp, %rdi
movl $0xa, %esi
callq 0x32b0
movsbl %al, %esi
movq %rbp, %rdi
callq 0x3030
movq %rax, %rdi
callq 0x31f0
movl $0x9, %edx
movq %rbx, %rdi
leaq 0x36c3(%rip), %rsi      # 0x8117
callq 0x32f0
movq %rbx, %rdi
movsd 0x30(%rsp), %xmm0
callq 0x3380
movl $0x2, %edx
movq %rax, %rdi
leaq 0x36e1(%rip), %rsi      # 0x8157
callq 0x32f0
movl $0x11, %edx
movq %rbx, %rdi
leaq 0x369a(%rip), %rsi      # 0x8124
callq 0x32f0
movq (%r15), %rax
movsd 0x38(%rax), %xmm0
movq %rbx, %rdi
callq 0x3380
movq %rax, %rbp
movq (%rax), %rax
movq -0x18(%rax), %rdi
addq %rbp, %rdi
movl $0xa, %esi
callq 0x32b0
movsbl %al, %esi
movq %rbp, %rdi
callq 0x3030
movq %rax, %rdi
callq 0x31f0
movl $0x10, %edx
movq %rbx, %rdi
leaq 0x365e(%rip), %rsi      # 0x8136
callq 0x32f0
movq (%r15), %rax
movsd 0x40(%rax), %xmm0
movq %rbx, %rdi
callq 0x3380
movq %rax, %rbp
movq (%rax), %rax
movq -0x18(%rax), %rdi
addq %rbp, %rdi
movl $0xa, %esi
callq 0x32b0
movsbl %al, %esi
movq %rbp, %rdi
callq 0x3030
movq %rax, %rdi
callq 0x31f0
movl $0xf, %edx
movq %rbx, %rdi
movq %r13, %rsi
callq 0x32f0
movq (%r15), %rax
movl 0x48(%rax), %esi
movq %rbx, %rdi
callq 0x31e0
movq %rax, %rbp
movq (%rax), %rax
movq -0x18(%rax), %rdi
addq %rbp, %rdi
movl $0xa, %esi
callq 0x32b0
movsbl %al, %esi
movq %rbp, %rdi
callq 0x3030
movq %rax, %rdi
callq 0x31f0
addq $0x8, %r15
movq 0x50(%r14), %rax
movsd 0x8(%rsp), %xmm1
movapd %xmm1, %xmm0
cmpq %rax, %r15
jne 0x4954
jmp 0x4b84
movsd 0x34bc(%rip), %xmm1     # 0x8040
movsd %xmm1, 0x8(%rsp)
subq 0x48(%r14), %rax
cmpq $0x8, %rax
jbe 0x4f22
movq 0x6431(%rip), %r15      # 0xafd0
leaq 0x35b4(%rip), %rsi      # 0x815a
movl $0x50, %edx
movq %r15, %rdi
callq 0x32f0
movq (%r15), %rax
addq -0x18(%rax), %r15
movq %r15, %rdi
movl $0xa, %esi
callq 0x32b0
movsbl %al, %esi
movq 0x63ff(%rip), %r15      # 0xafd0
movq %r15, %rdi
callq 0x3030
movq %rax, %rdi
callq 0x31f0
movq (%r15), %rax
addq -0x18(%rax), %r15
movq %r15, %rdi
movl $0xa, %esi
callq 0x32b0
movsbl %al, %esi
movq 0x63d1(%rip), %rdi      # 0xafd0
callq 0x3030
movq %rax, %rdi
callq 0x31f0
movq 0x18(%r12), %rsi
movq 0x20(%r12), %rdx
movq %rax, %rdi
callq 0x32f0
movq %rax, %r15
movq (%rax), %rax
movq -0x18(%rax), %rdi
addq %r15, %rdi
movl $0xa, %esi
callq 0x32b0
movsbl %al, %esi
movq %r15, %rdi
callq 0x3030
movq %rax, %rdi
callq 0x31f0
movq 0x6381(%rip), %rdi      # 0xafd0
leaq 0x34c1(%rip), %rsi      # 0x8117
movl $0x9, %edx
callq 0x32f0
movq 0x6369(%rip), %rdi      # 0xafd0
movsd 0x8(%rsp), %xmm0
callq 0x3380
leaq 0x34de(%rip), %rsi      # 0x8157
movl $0x2, %edx
movq %rax, %rdi
callq 0x32f0
movq 0x6343(%rip), %rdi      # 0xafd0
leaq 0x3490(%rip), %rsi      # 0x8124
movl $0x11, %edx
callq 0x32f0
movsd 0x38(%r12), %xmm0
movq 0x6324(%rip), %rdi      # 0xafd0
callq 0x3380
movq %rax, %r15
movq (%rax), %rax
movq -0x18(%rax), %rdi
addq %r15, %rdi
movl $0xa, %esi
callq 0x32b0
movsbl %al, %esi
movq %r15, %rdi
callq 0x3030
movq %rax, %rdi
callq 0x31f0
movq 0x62ee(%rip), %rdi      # 0xafd0
leaq 0x344d(%rip), %rsi      # 0x8136
movl $0x10, %edx
callq 0x32f0
movsd 0x40(%r12), %xmm0
movq 0x62cf(%rip), %rdi      # 0xafd0
callq 0x3380
movq %rax, %r15
movq (%rax), %rax
movq -0x18(%rax), %rdi
addq %r15, %rdi
movl $0xa, %esi
callq 0x32b0
movsbl %al, %esi
movq %r15, %rdi
callq 0x3030
movq %rax, %rdi
callq 0x31f0
movq 0x6299(%rip), %r15      # 0xafd0
leaq 0x346d(%rip), %rsi      # 0x81ab
movl $0x51, %edx
movq %r15, %rdi
callq 0x32f0
movq (%r15), %rax
addq -0x18(%rax), %r15
movq %r15, %rdi
movl $0xa, %esi
callq 0x32b0
movsbl %al, %esi
movq 0x6267(%rip), %r15      # 0xafd0
movq %r15, %rdi
callq 0x3030
movq %rax, %rdi
callq 0x31f0
movq 0x10(%rsp), %rbp
cmpq 0x18(%rsp), %rbp
je 0x4f22
leaq 0x33a6(%rip), %r12      # 0x8136
movq (%rbp), %rcx
movq (%rcx), %rax
movq 0x8(%rcx), %rcx
subq %rax, %rcx
sarq $0x2, %rcx
decq %rcx
je 0x4dd4
movq 0x10(%r14), %rdx
xorpd %xmm0, %xmm0
xorl %esi, %esi
movslq (%rax,%rsi,4), %rdi
incq %rsi
movl %esi, %r8d
movslq (%rax,%r8,4), %r9
leaq (%rdi,%rdi,2), %rdi
movq (%rdx,%rdi,8), %rdi
addsd (%rdi,%r9,8), %xmm0
cmpq %r8, %rcx
ja 0x4db1
jmp 0x4dd8
xorpd %xmm0, %xmm0
movsd %xmm0, 0x8(%rsp)
movq (%r15), %rax
movq -0x18(%rax), %rdi
addq %r15, %rdi
movl $0xa, %esi
callq 0x32b0
movsbl %al, %esi
movq %r15, %rdi
callq 0x3030
movq %rax, %rdi
callq 0x31f0
movq (%rbp), %rcx
movq 0x18(%rcx), %rsi
movq 0x20(%rcx), %rdx
movq %rax, %rdi
callq 0x32f0
movq %rax, %r13
movq (%rax), %rax
movq -0x18(%rax), %rdi
addq %r13, %rdi
movl $0xa, %esi
callq 0x32b0
movsbl %al, %esi
movq %r13, %rdi
callq 0x3030
movq %rax, %rdi
callq 0x31f0
movl $0x9, %edx
movq %r15, %rdi
leaq 0x32c5(%rip), %rsi      # 0x8117
callq 0x32f0
movq %r15, %rdi
movsd 0x8(%rsp), %xmm0
callq 0x3380
movl $0x2, %edx
movq %rax, %rdi
leaq 0x32e3(%rip), %rsi      # 0x8157
callq 0x32f0
movl $0x11, %edx
movq %r15, %rdi
leaq 0x329c(%rip), %rsi      # 0x8124
callq 0x32f0
movq (%rbp), %rax
movsd 0x38(%rax), %xmm0
movq %r15, %rdi
callq 0x3380
movq %rax, %r13
movq (%rax), %rax
movq -0x18(%rax), %rdi
addq %r13, %rdi
movl $0xa, %esi
callq 0x32b0
movsbl %al, %esi
movq %r13, %rdi
callq 0x3030
movq %rax, %rdi
callq 0x31f0
movl $0x10, %edx
movq %r15, %rdi
movq %r12, %rsi
callq 0x32f0
movq (%rbp), %rax
movsd 0x40(%rax), %xmm0
movq %r15, %rdi
callq 0x3380
movq %rax, %r13
movq (%rax), %rax
movq -0x18(%rax), %rdi
addq %r13, %rdi
movl $0xa, %esi
callq 0x32b0
movsbl %al, %esi
movq %r13, %rdi
callq 0x3030
movq %rax, %rdi
callq 0x31f0
addq $0x8, %rbp
cmpq 0x18(%rsp), %rbp
jne 0x4d90
movq (%rbx), %rax
addq -0x18(%rax), %rbx
movq %rbx, %rdi
movl $0xa, %esi
callq 0x32b0
movsbl %al, %esi
movq 0x6090(%rip), %rdi      # 0xafd0
callq 0x3030
movq %rax, %rdi
callq 0x31f0
movq 0x10(%rsp), %rdi
testq %rdi, %rdi
je 0x4f5c
callq 0x3290
addq $0x38, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
jmp 0x4f6f
jmp 0x4f6f
movq %rax, %rbx
movq 0x10(%rsp), %rdi
testq %rdi, %rdi
je 0x4f81
callq 0x3290
movq %rbx, %rdi
callq 0x3410
nop