// File: meghanamreddy[P]Range-trees-and-Interval-Trees/binaryRangeTree.cpp
// Function: BinaryRangeTree::onedqueryYtree(BinaryRangeTree*, int, int)
void BinaryRangeTree::onedqueryYtree(BinaryRangeTree *r, int x1, int x2) {
	BinaryRangeNode* splitnode = findSplitNodeYtree(r->root, x1, x2);
	if (splitnode == NULL)
		return;
	BinaryRangeNode* v;
	if ((splitnode->data >= x1) & (splitnode->data <= x2))
			reportPointYtree(splitnode);			
	if (!isLeaf(splitnode)) {
		// go to left
		v = splitnode->left;
		while (!isLeaf(v)) { // is not a leaf
			if (x1 <= v->data) {
				reportPointYtree(v);
				reportSubtree(v->right);
				v = v->left;
			}
			else
				v = v->right;
		}
		if (v != NULL) {
			if ((v->data >= x1) & (v->data <= x2))
				reportPointYtree(v);
		}

		// go to right
		v = splitnode->right;
		while (!isLeaf(v)) { // is not a leaf
			if (x2 >= v->data) {
				reportPointYtree(v);	
				reportSubtree(v->left);
				v = v->right;
			}
			else
				v = v->left;
		}
		if (v != NULL) {
			if ((v->data >= x1) & (v->data <= x2))
				reportPointYtree(v);
		}
	}
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x30, %rsp
movq %rdi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
movl %edx, -0x14(%rbp)
movl %ecx, -0x18(%rbp)
movq -0x8(%rbp), %rdi
movq %rdi, -0x30(%rbp)
movq -0x10(%rbp), %rax
movq (%rax), %rsi
movl -0x14(%rbp), %edx
movl -0x18(%rbp), %ecx
callq 0x78d0
movq %rax, -0x20(%rbp)
cmpq $0x0, -0x20(%rbp)
jne 0x7f10
jmp 0x80b2
movq -0x20(%rbp), %rax
movl 0x4(%rax), %eax
cmpl -0x14(%rbp), %eax
setge %al
andb $0x1, %al
movzbl %al, %eax
movq -0x20(%rbp), %rcx
movl 0x4(%rcx), %ecx
cmpl -0x18(%rbp), %ecx
setle %cl
andb $0x1, %cl
movzbl %cl, %ecx
andl %ecx, %eax
cmpl $0x0, %eax
je 0x7f49
movq -0x30(%rbp), %rdi
movq -0x20(%rbp), %rsi
callq 0x7b70
movq -0x30(%rbp), %rdi
movq -0x20(%rbp), %rsi
callq 0x7870
testb $0x1, %al
jne 0x80b2
movq -0x20(%rbp), %rax
movq 0x20(%rax), %rax
movq %rax, -0x28(%rbp)
movq -0x30(%rbp), %rdi
movq -0x28(%rbp), %rsi
callq 0x7870
xorb $-0x1, %al
testb $0x1, %al
jne 0x7f7f
jmp 0x7fc5
movl -0x14(%rbp), %eax
movq -0x28(%rbp), %rcx
cmpl 0x4(%rcx), %eax
jg 0x7fb7
movq -0x30(%rbp), %rdi
movq -0x28(%rbp), %rsi
callq 0x7b70
movq -0x30(%rbp), %rdi
movq -0x28(%rbp), %rax
movq 0x28(%rax), %rsi
callq 0x79b0
movq -0x28(%rbp), %rax
movq 0x20(%rax), %rax
movq %rax, -0x28(%rbp)
jmp 0x7fc3
movq -0x28(%rbp), %rax
movq 0x28(%rax), %rax
movq %rax, -0x28(%rbp)
jmp 0x7f6a
cmpq $0x0, -0x28(%rbp)
je 0x8007
movq -0x28(%rbp), %rax
movl 0x4(%rax), %eax
cmpl -0x14(%rbp), %eax
setge %al
andb $0x1, %al
movzbl %al, %eax
movq -0x28(%rbp), %rcx
movl 0x4(%rcx), %ecx
cmpl -0x18(%rbp), %ecx
setle %cl
andb $0x1, %cl
movzbl %cl, %ecx
andl %ecx, %eax
cmpl $0x0, %eax
je 0x8005
movq -0x30(%rbp), %rdi
movq -0x28(%rbp), %rsi
callq 0x7b70
jmp 0x8007
movq -0x20(%rbp), %rax
movq 0x28(%rax), %rax
movq %rax, -0x28(%rbp)
movq -0x30(%rbp), %rdi
movq -0x28(%rbp), %rsi
callq 0x7870
xorb $-0x1, %al
testb $0x1, %al
jne 0x8028
jmp 0x806e
movl -0x18(%rbp), %eax
movq -0x28(%rbp), %rcx
cmpl 0x4(%rcx), %eax
jl 0x8060
movq -0x30(%rbp), %rdi
movq -0x28(%rbp), %rsi
callq 0x7b70
movq -0x30(%rbp), %rdi
movq -0x28(%rbp), %rax
movq 0x20(%rax), %rsi
callq 0x79b0
movq -0x28(%rbp), %rax
movq 0x28(%rax), %rax
movq %rax, -0x28(%rbp)
jmp 0x806c
movq -0x28(%rbp), %rax
movq 0x20(%rax), %rax
movq %rax, -0x28(%rbp)
jmp 0x8013
cmpq $0x0, -0x28(%rbp)
je 0x80b0
movq -0x28(%rbp), %rax
movl 0x4(%rax), %eax
cmpl -0x14(%rbp), %eax
setge %al
andb $0x1, %al
movzbl %al, %eax
movq -0x28(%rbp), %rcx
movl 0x4(%rcx), %ecx
cmpl -0x18(%rbp), %ecx
setle %cl
andb $0x1, %cl
movzbl %cl, %ecx
andl %ecx, %eax
cmpl $0x0, %eax
je 0x80ae
movq -0x30(%rbp), %rdi
movq -0x28(%rbp), %rsi
callq 0x7b70
jmp 0x80b0
jmp 0x80b2
addq $0x30, %rsp
popq %rbp
retq
nopl (%rax,%rax)