// File: /workspace/github_cpp_makefile_star2_O3/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 0x6750(%rip), %rbx      # 0xafd0
leaq 0x3829(%rip), %rsi      # 0x80b0
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
xorps %xmm0, %xmm0
movaps %xmm0, 0x10(%rsp)
movq $0x0, 0x20(%rsp)
movq 0x48(%r14), %rax
cmpq 0x50(%r14), %rax
je 0x4aeb
leaq 0x8(%r14), %r15
movsd 0x373a(%rip), %xmm0     # 0x8020
movsd %xmm0, 0x8(%rsp)
leaq 0x3834(%rip), %r13      # 0x8127
movq %rax, %r12
movq (%r12), %rdi
movq %r15, %rsi
callq 0x52e0
movsd 0x8(%rsp), %xmm1
ucomisd %xmm0, %xmm1
jbe 0x491b
movq (%r12), %rax
movq %rax, 0x28(%rsp)
movapd %xmm0, %xmm1
movsd %xmm1, 0x8(%rsp)
movsd %xmm0, 0x30(%rsp)
ucomisd %xmm0, %xmm1
jb 0x4955
movq 0x18(%rsp), %rsi
cmpq 0x20(%rsp), %rsi
je 0x4948
movq (%r12), %rax
movq %rax, (%rsi)
addq $0x8, 0x18(%rsp)
jmp 0x4955
leaq 0x10(%rsp), %rdi
movq %r12, %rdx
callq 0x5ab0
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 (%r12), %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 0x372e(%rip), %rsi      # 0x80f7
callq 0x32f0
movq %rbx, %rdi
movsd 0x30(%rsp), %xmm0
callq 0x3380
movl $0x2, %edx
movq %rax, %rdi
leaq 0x374c(%rip), %rsi      # 0x8137
callq 0x32f0
movl $0x11, %edx
movq %rbx, %rdi
leaq 0x3705(%rip), %rsi      # 0x8104
callq 0x32f0
movq (%r12), %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 0x36c8(%rip), %rsi      # 0x8116
callq 0x32f0
movq (%r12), %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 (%r12), %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, %r12
cmpq 0x50(%r14), %r12
jne 0x48f6
movq 0x48(%r14), %rax
jmp 0x4afc
movsd 0x352d(%rip), %xmm0     # 0x8020
movsd %xmm0, 0x8(%rsp)
movq %rax, %r12
subq %rax, %r12
cmpq $0x8, %r12
jbe 0x4e60
movq 0x64c0(%rip), %r15      # 0xafd0
leaq 0x3623(%rip), %rsi      # 0x813a
movl $0x50, %edx
movq %r15, %rdi
callq 0x32f0
movq 0x28(%rsp), %r12
movq (%r15), %rax
addq -0x18(%rax), %r15
movq %r15, %rdi
movl $0xa, %esi
callq 0x32b0
movsbl %al, %esi
movq 0x6489(%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 0x645b(%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 0x640b(%rip), %rdi      # 0xafd0
leaq 0x352b(%rip), %rsi      # 0x80f7
movl $0x9, %edx
callq 0x32f0
movq 0x63f3(%rip), %rdi      # 0xafd0
movsd 0x8(%rsp), %xmm0
callq 0x3380
leaq 0x3548(%rip), %rsi      # 0x8137
movl $0x2, %edx
movq %rax, %rdi
callq 0x32f0
movq 0x63cd(%rip), %rdi      # 0xafd0
leaq 0x34fa(%rip), %rsi      # 0x8104
movl $0x11, %edx
callq 0x32f0
movsd 0x38(%r12), %xmm0
movq 0x63ae(%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 0x6378(%rip), %rdi      # 0xafd0
leaq 0x34b7(%rip), %rsi      # 0x8116
movl $0x10, %edx
callq 0x32f0
movsd 0x40(%r12), %xmm0
movq 0x6359(%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 0x6323(%rip), %r15      # 0xafd0
leaq 0x34d7(%rip), %rsi      # 0x818b
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 0x62f1(%rip), %r15      # 0xafd0
movq %r15, %rdi
callq 0x3030
movq %rax, %rdi
callq 0x31f0
movq 0x10(%rsp), %rbp
cmpq 0x18(%rsp), %rbp
je 0x4e60
addq $0x8, %r14
leaq 0x340c(%rip), %r12      # 0x8116
movq (%rbp), %rdi
movq %r14, %rsi
callq 0x52e0
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 0x3367(%rip), %rsi      # 0x80f7
callq 0x32f0
movq %r15, %rdi
movsd 0x8(%rsp), %xmm0
callq 0x3380
movl $0x2, %edx
movq %rax, %rdi
leaq 0x3385(%rip), %rsi      # 0x8137
callq 0x32f0
movl $0x11, %edx
movq %r15, %rdi
leaq 0x333e(%rip), %rsi      # 0x8104
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 0x4d0a
movq (%rbx), %rax
addq -0x18(%rax), %rbx
movq %rbx, %rdi
movl $0xa, %esi
callq 0x32b0
movsbl %al, %esi
movq 0x6152(%rip), %rdi      # 0xafd0
callq 0x3030
movq %rax, %rdi
callq 0x31f0
movq 0x10(%rsp), %rdi
testq %rdi, %rdi
je 0x4e9a
callq 0x3290
addq $0x38, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
jmp 0x4ead
jmp 0x4ead
movq %rax, %rbx
movq 0x10(%rsp), %rdi
testq %rdi, %rdi
je 0x4ebf
callq 0x3290
movq %rbx, %rdi
callq 0x3410
nop