// File: kiudee[P]VAHD-Projekt/Node.cpp
// Function: Node::checkStable(double)
void Node::checkStable(double id)
{
    bool changedleftstable = leftstable;
    bool changedrightstable = rightstable;

    if (id == num) {
        if (left != NULL && left->num == id) {
            leftstable = true;
        }

        if (right != NULL && right->num == id) {
            rightstable = true;
        }

    } else if (id < num && left != NULL) {
        leftstable = left->num == id;
    } else if (id > num && right != NULL) {
        rightstable = right->num == id;
    }

    changedleftstable = changedleftstable != leftstable;
    changedrightstable = changedrightstable != rightstable;

    if ((leftstable || left == NULL) && (rightstable || right == NULL) && (changedleftstable || changedrightstable)) {
        //if((leftstable) && (rightstable) &&  (changedleftstable || changedrightstable)) {
        if (left != NULL && right != NULL) {
            std::cout << left->num << " <-> " << num << " <-> " << right->num << "\n";
        } else if (left != NULL) {
            std::cout << left->num << " <-> " << num << " <-> NULL\n";
        } else if (right != NULL) {
            std::cout << "NULL <-> " << num << " <-> " << right->num << "\n";
        } else {
            std::cout << "NULL <-> " << num << " <-> NULL\n";
        }
    }


}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x20, %rsp
movq %rdi, -0x8(%rbp)
movsd %xmm0, -0x10(%rbp)
movq -0x8(%rbp), %rax
movq %rax, -0x20(%rbp)
movb 0x60(%rax), %cl
andb $0x1, %cl
movb %cl, -0x11(%rbp)
movb 0x61(%rax), %cl
andb $0x1, %cl
movb %cl, -0x12(%rbp)
movsd -0x10(%rbp), %xmm0
ucomisd 0xb0(%rax), %xmm0
jne 0x1411f
jp 0x1411f
movq -0x20(%rbp), %rax
cmpq $0x0, 0xc8(%rax)
je 0x140eb
movq -0x20(%rbp), %rax
movq 0xc8(%rax), %rax
movsd 0x20(%rax), %xmm0
ucomisd -0x10(%rbp), %xmm0
jne 0x140eb
jp 0x140eb
movq -0x20(%rbp), %rax
movb $0x1, 0x60(%rax)
movq -0x20(%rbp), %rax
cmpq $0x0, 0xd0(%rax)
je 0x1411a
movq -0x20(%rbp), %rax
movq 0xd0(%rax), %rax
movsd 0x20(%rax), %xmm0
ucomisd -0x10(%rbp), %xmm0
jne 0x1411a
jp 0x1411a
movq -0x20(%rbp), %rax
movb $0x1, 0x61(%rax)
jmp 0x141b1
movq -0x20(%rbp), %rax
movsd -0x10(%rbp), %xmm1
movsd 0xb0(%rax), %xmm0
ucomisd %xmm1, %xmm0
jbe 0x14169
movq -0x20(%rbp), %rax
cmpq $0x0, 0xc8(%rax)
je 0x14169
movq -0x20(%rbp), %rax
movq 0xc8(%rax), %rcx
movsd 0x20(%rcx), %xmm0
ucomisd -0x10(%rbp), %xmm0
sete %cl
setnp %dl
andb %dl, %cl
andb $0x1, %cl
movb %cl, 0x60(%rax)
jmp 0x141af
movq -0x20(%rbp), %rax
movsd -0x10(%rbp), %xmm0
ucomisd 0xb0(%rax), %xmm0
jbe 0x141ad
movq -0x20(%rbp), %rax
cmpq $0x0, 0xd0(%rax)
je 0x141ad
movq -0x20(%rbp), %rax
movq 0xd0(%rax), %rcx
movsd 0x20(%rcx), %xmm0
ucomisd -0x10(%rbp), %xmm0
sete %cl
setnp %dl
andb %dl, %cl
andb $0x1, %cl
movb %cl, 0x61(%rax)
jmp 0x141af
jmp 0x141b1
movq -0x20(%rbp), %rax
movb -0x11(%rbp), %cl
andb $0x1, %cl
movzbl %cl, %ecx
movb 0x60(%rax), %dl
andb $0x1, %dl
movzbl %dl, %edx
cmpl %edx, %ecx
setne %cl
andb $0x1, %cl
movb %cl, -0x11(%rbp)
movb -0x12(%rbp), %cl
andb $0x1, %cl
movzbl %cl, %ecx
movb 0x61(%rax), %dl
andb $0x1, %dl
movzbl %dl, %edx
cmpl %edx, %ecx
setne %cl
andb $0x1, %cl
movb %cl, -0x12(%rbp)
testb $0x1, 0x60(%rax)
jne 0x14207
movq -0x20(%rbp), %rax
cmpq $0x0, 0xc8(%rax)
jne 0x143d7
movq -0x20(%rbp), %rax
testb $0x1, 0x61(%rax)
jne 0x14223
movq -0x20(%rbp), %rax
cmpq $0x0, 0xd0(%rax)
jne 0x143d7
testb $0x1, -0x11(%rbp)
jne 0x14233
testb $0x1, -0x12(%rbp)
je 0x143d7
movq -0x20(%rbp), %rax
cmpq $0x0, 0xc8(%rax)
je 0x142cd
movq -0x20(%rbp), %rax
cmpq $0x0, 0xd0(%rax)
je 0x142cd
movq -0x20(%rbp), %rax
movq 0xc8(%rax), %rax
movsd 0x20(%rax), %xmm0
movq 0xcd66(%rip), %rdi      # 0x20fd0
callq 0x3370
movq %rax, %rdi
leaq 0x3303(%rip), %rsi      # 0x1757c
callq 0x31b0
movq %rax, %rdi
movq -0x20(%rbp), %rax
movsd 0xb0(%rax), %xmm0
callq 0x3370
movq %rax, %rdi
leaq 0x32e0(%rip), %rsi      # 0x1757c
callq 0x31b0
movq %rax, %rdi
movq -0x20(%rbp), %rax
movq 0xd0(%rax), %rax
movsd 0x20(%rax), %xmm0
callq 0x3370
movq %rax, %rdi
leaq 0x31fc(%rip), %rsi      # 0x174bf
callq 0x31b0
jmp 0x143d5
movq -0x20(%rbp), %rax
cmpq $0x0, 0xc8(%rax)
je 0x1432e
movq -0x20(%rbp), %rax
movq 0xc8(%rax), %rax
movsd 0x20(%rax), %xmm0
movq 0xccde(%rip), %rdi      # 0x20fd0
callq 0x3370
movq %rax, %rdi
leaq 0x327b(%rip), %rsi      # 0x1757c
callq 0x31b0
movq %rax, %rdi
movq -0x20(%rbp), %rax
movsd 0xb0(%rax), %xmm0
callq 0x3370
movq %rax, %rdi
leaq 0x3249(%rip), %rsi      # 0x1756d
callq 0x31b0
jmp 0x143d3
movq -0x20(%rbp), %rax
cmpq $0x0, 0xd0(%rax)
je 0x1439b
movq 0xcc8d(%rip), %rdi      # 0x20fd0
leaq 0x322e(%rip), %rsi      # 0x17578
callq 0x31b0
movq %rax, %rdi
movq -0x20(%rbp), %rax
movsd 0xb0(%rax), %xmm0
callq 0x3370
movq %rax, %rdi
leaq 0x320f(%rip), %rsi      # 0x1757c
callq 0x31b0
movq %rax, %rdi
movq -0x20(%rbp), %rax
movq 0xd0(%rax), %rax
movsd 0x20(%rax), %xmm0
callq 0x3370
movq %rax, %rdi
leaq 0x312b(%rip), %rsi      # 0x174bf
callq 0x31b0
jmp 0x143d1
movq 0xcc2e(%rip), %rdi      # 0x20fd0
leaq 0x31cf(%rip), %rsi      # 0x17578
callq 0x31b0
movq %rax, %rdi
movq -0x20(%rbp), %rax
movsd 0xb0(%rax), %xmm0
callq 0x3370
movq %rax, %rdi
leaq 0x31a1(%rip), %rsi      # 0x1756d
callq 0x31b0
jmp 0x143d3
jmp 0x143d5
jmp 0x143d7
addq $0x20, %rsp
popq %rbp
retq
nopl (%rax)