// File: comptotherescue[P]Fibonacci-Heap/keywordcounter.cpp
// Function: Fibops::IncreaseKey(Fib*, int)
void IncreaseKey(Fib *key, int a_iVal)
	{
		Fib* k;
		key->m_iData += a_iVal;
		//Check if the value is greater than it's parent
		if (NULL == key->m_pParent)
		{
			if (m_pMax->m_iData < key->m_iData)
			{
				m_pMax = key;
			}
			return;
		}
		if (key->m_pParent->m_iData < key->m_iData)
		{
			do
			{
				if (key->m_pRightsib == key)
				{ 
					key->m_pParent->m_pChild = NULL;
				}
				else
				{
					key->m_pParent->m_pChild = key->m_pRightsib;
					key->m_pLeftsib->m_pRightsib = key->m_pRightsib;
					key->m_pRightsib->m_pLeftsib = key->m_pLeftsib;
				}
				//Make childcut boolean true
				key->m_pParent->m_bChildcut = true;
				key->m_pParent->m_iDegree -= 1;
				m_pMax->m_pRightsib->m_pLeftsib = key;
				key->m_pRightsib = m_pMax->m_pRightsib;
				m_pMax->m_pRightsib = key;
				key->m_pLeftsib = m_pMax;
				if (m_pMax->m_iData < key->m_iData)
				{
					m_pMax = key;
				}
				k = key->m_pParent;
				key->m_pParent = NULL;
				key = k;
			} while (NULL != key->m_pParent && key->m_pParent->m_bChildcut == true); // check if parent's childcut is true
		}
	}

// Assembly:
pushq %rbp
movq %rsp, %rbp
movq %rdi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
movl %edx, -0x14(%rbp)
movq -0x8(%rbp), %rax
movq %rax, -0x28(%rbp)
movl -0x14(%rbp), %ecx
movq -0x10(%rbp), %rax
addl 0x4(%rax), %ecx
movl %ecx, 0x4(%rax)
movq -0x10(%rbp), %rcx
xorl %eax, %eax
cmpq 0x20(%rcx), %rax
jne 0x3213
movq -0x28(%rbp), %rax
movq (%rax), %rax
movl 0x4(%rax), %eax
movq -0x10(%rbp), %rcx
cmpl 0x4(%rcx), %eax
jge 0x320e
movq -0x28(%rbp), %rax
movq -0x10(%rbp), %rcx
movq %rcx, (%rax)
jmp 0x334d
movq -0x10(%rbp), %rax
movq 0x20(%rax), %rax
movl 0x4(%rax), %eax
movq -0x10(%rbp), %rcx
cmpl 0x4(%rcx), %eax
jge 0x334d
jmp 0x322d
movq -0x10(%rbp), %rax
movq 0x18(%rax), %rax
cmpq -0x10(%rbp), %rax
jne 0x324d
movq -0x10(%rbp), %rax
movq 0x20(%rax), %rax
movq $0x0, 0x8(%rax)
jmp 0x3289
movq -0x10(%rbp), %rax
movq 0x18(%rax), %rcx
movq -0x10(%rbp), %rax
movq 0x20(%rax), %rax
movq %rcx, 0x8(%rax)
movq -0x10(%rbp), %rax
movq 0x18(%rax), %rcx
movq -0x10(%rbp), %rax
movq 0x10(%rax), %rax
movq %rcx, 0x18(%rax)
movq -0x10(%rbp), %rax
movq 0x10(%rax), %rcx
movq -0x10(%rbp), %rax
movq 0x18(%rax), %rax
movq %rcx, 0x10(%rax)
movq -0x28(%rbp), %rax
movq -0x10(%rbp), %rcx
movq 0x20(%rcx), %rcx
movb $0x1, 0x28(%rcx)
movq -0x10(%rbp), %rcx
movq 0x20(%rcx), %rcx
movl (%rcx), %edx
subl $0x1, %edx
movl %edx, (%rcx)
movq -0x10(%rbp), %rdx
movq (%rax), %rcx
movq 0x18(%rcx), %rcx
movq %rdx, 0x10(%rcx)
movq (%rax), %rcx
movq 0x18(%rcx), %rdx
movq -0x10(%rbp), %rcx
movq %rdx, 0x18(%rcx)
movq -0x10(%rbp), %rdx
movq (%rax), %rcx
movq %rdx, 0x18(%rcx)
movq (%rax), %rdx
movq -0x10(%rbp), %rcx
movq %rdx, 0x10(%rcx)
movq (%rax), %rax
movl 0x4(%rax), %eax
movq -0x10(%rbp), %rcx
cmpl 0x4(%rcx), %eax
jge 0x32f6
movq -0x28(%rbp), %rax
movq -0x10(%rbp), %rcx
movq %rcx, (%rax)
movq -0x10(%rbp), %rax
movq 0x20(%rax), %rax
movq %rax, -0x20(%rbp)
movq -0x10(%rbp), %rax
movq $0x0, 0x20(%rax)
movq -0x20(%rbp), %rax
movq %rax, -0x10(%rbp)
movq -0x10(%rbp), %rdx
xorl %eax, %eax
xorl %ecx, %ecx
cmpq 0x20(%rdx), %rcx
movb %al, -0x29(%rbp)
je 0x3340
movq -0x10(%rbp), %rax
movq 0x20(%rax), %rax
movb 0x28(%rax), %al
andb $0x1, %al
movzbl %al, %eax
cmpl $0x1, %eax
sete %al
movb %al, -0x29(%rbp)
movb -0x29(%rbp), %al
testb $0x1, %al
jne 0x322d
jmp 0x334d
popq %rbp
retq
nop