// File: kiudee[P]VAHD-Projekt/Node.cpp
// Function: Node::doDebruijnHop(SearchJob*)
bool Node::doDebruijnHop(SearchJob *sj)
{
    if (!isReal) {
        return false;
    }
    double hashedkey = sj->sid;

    if (hashedkey < num) {
        if (fabs(hashedkey - num / 2) < fabs(hashedkey - num)) {
            sj->round++;
            sj->hopcount++;
            if (sj->type == LOOKUP || sj->type == INSERT || sj->type == DELETE) {
                std::cout << "(" << sj->_debugID << ") " << num << "<-doDebruijnHop(" << sj->sid << ") to " << (num / 2) << "\n";
            }
            node0->out->call(Node::Search, sj);
            return true;
        }

    } else if (hashedkey > num) {
        if (fabs(hashedkey - (1 + num) / 2) < fabs(hashedkey - num)) {
            sj->round++;
            sj->hopcount++;
            if (sj->type == LOOKUP || sj->type == INSERT || sj->type == DELETE) {
                std::cout << "(" << sj->_debugID << ") " << num << "<-doDebruijnHop(" << sj->sid << ") to " << ((1 + num) / 2) << "\n";
            }
            node1->out->call(Node::Search, sj);
            return true;
        }
    } else { // hashedkey == num
        FinishSearch(sj);
    }
    return false;//default: if no hop was performed, perform a list hop
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x80, %rsp
movq %rdi, -0x10(%rbp)
movq %rsi, -0x18(%rbp)
movq -0x10(%rbp), %rax
movq %rax, -0x58(%rbp)
testb $0x1, 0xb8(%rax)
jne 0x12edd
movb $0x0, -0x1(%rbp)
jmp 0x132a9
movq -0x58(%rbp), %rax
movq -0x18(%rbp), %rcx
movsd 0x20(%rcx), %xmm0
movsd %xmm0, -0x20(%rbp)
movsd -0x20(%rbp), %xmm1
movsd 0xb0(%rax), %xmm0
ucomisd %xmm1, %xmm0
jbe 0x130bf
movq -0x58(%rbp), %rax
movsd -0x20(%rbp), %xmm1
movsd 0xb0(%rax), %xmm0
movsd 0x44f1(%rip), %xmm2     # 0x17410
divsd %xmm2, %xmm0
subsd %xmm0, %xmm1
movaps 0x4502(%rip), %xmm0     # 0x17430
pand %xmm0, %xmm1
movsd -0x20(%rbp), %xmm0
subsd 0xb0(%rax), %xmm0
movaps 0x44ea(%rip), %xmm2     # 0x17430
pand %xmm2, %xmm0
ucomisd %xmm1, %xmm0
jbe 0x130ba
movq -0x18(%rbp), %rax
movl 0x48(%rax), %ecx
addl $0x1, %ecx
movl %ecx, 0x48(%rax)
movq -0x18(%rbp), %rax
movl 0x4c(%rax), %ecx
addl $0x1, %ecx
movl %ecx, 0x4c(%rax)
movq -0x18(%rbp), %rax
cmpl $0x2, 0x38(%rax)
je 0x12f90
movq -0x18(%rbp), %rax
cmpl $0x0, 0x38(%rax)
je 0x12f90
movq -0x18(%rbp), %rax
cmpl $0x1, 0x38(%rax)
jne 0x13033
movq 0xe039(%rip), %rdi      # 0x20fd0
leaq 0x450f(%rip), %rsi      # 0x174ad
callq 0x31b0
movq %rax, %rdi
movq -0x18(%rbp), %rax
movq (%rax), %rsi
callq 0x3060
movq %rax, %rdi
leaq 0x44ca(%rip), %rsi      # 0x17486
callq 0x31b0
movq %rax, %rdi
movq -0x58(%rbp), %rax
movsd 0xb0(%rax), %xmm0
callq 0x3370
movq %rax, %rdi
leaq 0x44fa(%rip), %rsi      # 0x174d9
callq 0x31b0
movq %rax, %rdi
movq -0x18(%rbp), %rax
movsd 0x20(%rax), %xmm0
callq 0x3370
movq %rax, %rdi
leaq 0x44eb(%rip), %rsi      # 0x174ea
callq 0x31b0
movq %rax, %rdi
movq -0x58(%rbp), %rax
movsd 0xb0(%rax), %xmm0
movsd 0x43f5(%rip), %xmm1     # 0x17410
divsd %xmm1, %xmm0
callq 0x3370
movq %rax, %rdi
leaq 0x4491(%rip), %rsi      # 0x174bf
callq 0x31b0
movq -0x58(%rbp), %rax
movq 0xd8(%rax), %rax
movq 0x28(%rax), %rax
movq %rax, -0x68(%rbp)
movl $0x38, %edi
callq 0x31c0
movq %rax, %rdi
movq %rdi, %rax
movq %rax, -0x60(%rbp)
leaq -0x17e1(%rip), %rax     # 0x11880
movq %rax, -0x30(%rbp)
movq $0x0, -0x28(%rbp)
movq -0x30(%rbp), %rsi
movq -0x28(%rbp), %rdx
leaq -0x18(%rbp), %rcx
callq 0x5ae0
jmp 0x13080
movq -0x60(%rbp), %rdx
movq -0x58(%rbp), %rsi
movq -0x68(%rbp), %rdi
movq (%rdi), %rax
callq *0x8(%rax)
movb $0x1, -0x1(%rbp)
jmp 0x132a9
movq -0x60(%rbp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
movl $0x38, %esi
callq 0x31d0
jmp 0x132b7
jmp 0x132a5
movq -0x58(%rbp), %rax
movsd -0x20(%rbp), %xmm0
ucomisd 0xb0(%rax), %xmm0
jbe 0x13296
movq -0x58(%rbp), %rax
movsd -0x20(%rbp), %xmm1
movsd 0x4321(%rip), %xmm0     # 0x17408
addsd 0xb0(%rax), %xmm0
movsd 0x4319(%rip), %xmm2     # 0x17410
divsd %xmm2, %xmm0
subsd %xmm0, %xmm1
movaps 0x432a(%rip), %xmm0     # 0x17430
pand %xmm0, %xmm1
movsd -0x20(%rbp), %xmm0
subsd 0xb0(%rax), %xmm0
movaps 0x4312(%rip), %xmm2     # 0x17430
pand %xmm2, %xmm0
ucomisd %xmm1, %xmm0
jbe 0x13294
movq -0x18(%rbp), %rax
movl 0x48(%rax), %ecx
addl $0x1, %ecx
movl %ecx, 0x48(%rax)
movq -0x18(%rbp), %rax
movl 0x4c(%rax), %ecx
addl $0x1, %ecx
movl %ecx, 0x4c(%rax)
movq -0x18(%rbp), %rax
cmpl $0x2, 0x38(%rax)
je 0x13168
movq -0x18(%rbp), %rax
cmpl $0x0, 0x38(%rax)
je 0x13168
movq -0x18(%rbp), %rax
cmpl $0x1, 0x38(%rax)
jne 0x13213
movq 0xde61(%rip), %rdi      # 0x20fd0
leaq 0x4337(%rip), %rsi      # 0x174ad
callq 0x31b0
movq %rax, %rdi
movq -0x18(%rbp), %rax
movq (%rax), %rsi
callq 0x3060
movq %rax, %rdi
leaq 0x42f2(%rip), %rsi      # 0x17486
callq 0x31b0
movq %rax, %rdi
movq -0x58(%rbp), %rax
movsd 0xb0(%rax), %xmm0
callq 0x3370
movq %rax, %rdi
leaq 0x4322(%rip), %rsi      # 0x174d9
callq 0x31b0
movq %rax, %rdi
movq -0x18(%rbp), %rax
movsd 0x20(%rax), %xmm0
callq 0x3370
movq %rax, %rdi
leaq 0x4313(%rip), %rsi      # 0x174ea
callq 0x31b0
movq %rax, %rdi
movq -0x58(%rbp), %rax
movsd 0x421d(%rip), %xmm0     # 0x17408
addsd 0xb0(%rax), %xmm0
movsd 0x4215(%rip), %xmm1     # 0x17410
divsd %xmm1, %xmm0
callq 0x3370
movq %rax, %rdi
leaq 0x42b1(%rip), %rsi      # 0x174bf
callq 0x31b0
movq -0x58(%rbp), %rax
movq 0xe0(%rax), %rax
movq 0x28(%rax), %rax
movq %rax, -0x78(%rbp)
movl $0x38, %edi
callq 0x31c0
movq %rax, %rdi
movq %rdi, %rax
movq %rax, -0x70(%rbp)
leaq -0x19c1(%rip), %rax     # 0x11880
movq %rax, -0x50(%rbp)
movq $0x0, -0x48(%rbp)
movq -0x50(%rbp), %rsi
movq -0x48(%rbp), %rdx
leaq -0x18(%rbp), %rcx
callq 0x5ae0
jmp 0x13260
movq -0x70(%rbp), %rdx
movq -0x58(%rbp), %rsi
movq -0x78(%rbp), %rdi
movq (%rdi), %rax
callq *0x8(%rax)
movb $0x1, -0x1(%rbp)
jmp 0x132a9
movq -0x70(%rbp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
movl $0x38, %esi
callq 0x31d0
jmp 0x132b7
jmp 0x132a3
movq -0x58(%rbp), %rdi
movq -0x18(%rbp), %rsi
callq 0x11b40
jmp 0x132a5
movb $0x0, -0x1(%rbp)
movb -0x1(%rbp), %al
andb $0x1, %al
addq $0x80, %rsp
popq %rbp
retq
movq -0x38(%rbp), %rdi
callq 0x3330