// File: meghanamreddy[P]Range-trees-and-Interval-Trees/binaryRangeTree.cpp
// Function: BinaryRangeTree::onedquery(int, int)
void BinaryRangeTree::onedquery(int x1, int x2) {
	BinaryRangeNode* splitnode = findSplitNode(root, x1, x2);
	BinaryRangeNode* v;
	int i;
	if ((splitnode->data >= x1) & (splitnode->data <= x2)) {
		reportPoint(splitnode);
	}
	if (!isLeaf(splitnode)) {
		// go to left
		v = splitnode->left;
		while (!isLeaf(v)) { // is not a leaf
			if (x1 <= v->data) {
				reportPoint(v); //report the point itself
				reportSubtree(v->right);
				v = v->left;
			}
			else
				v = v->right;
		}
		if (v != NULL) {
			if ((v->data >= x1) & (v->data <= x2))
				reportPoint(v);	// Report the point itself
		}

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

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x30, %rsp
movq %rdi, -0x8(%rbp)
movl %esi, -0xc(%rbp)
movl %edx, -0x10(%rbp)
movq -0x8(%rbp), %rdi
movq %rdi, -0x30(%rbp)
movq (%rdi), %rsi
movl -0xc(%rbp), %edx
movl -0x10(%rbp), %ecx
callq 0x77c0
movq %rax, -0x18(%rbp)
movq -0x18(%rbp), %rax
movl 0x4(%rax), %eax
cmpl -0xc(%rbp), %eax
setge %al
andb $0x1, %al
movzbl %al, %eax
movq -0x18(%rbp), %rcx
movl 0x4(%rcx), %ecx
cmpl -0x10(%rbp), %ecx
setle %cl
andb $0x1, %cl
movzbl %cl, %ecx
andl %ecx, %eax
cmpl $0x0, %eax
je 0x7d55
movq -0x30(%rbp), %rdi
movq -0x18(%rbp), %rsi
callq 0x79f0
movq -0x30(%rbp), %rdi
movq -0x18(%rbp), %rsi
callq 0x7870
testb $0x1, %al
jne 0x7ebe
movq -0x18(%rbp), %rax
movq 0x20(%rax), %rax
movq %rax, -0x20(%rbp)
movq -0x30(%rbp), %rdi
movq -0x20(%rbp), %rsi
callq 0x7870
xorb $-0x1, %al
testb $0x1, %al
jne 0x7d8b
jmp 0x7dd1
movl -0xc(%rbp), %eax
movq -0x20(%rbp), %rcx
cmpl 0x4(%rcx), %eax
jg 0x7dc3
movq -0x30(%rbp), %rdi
movq -0x20(%rbp), %rsi
callq 0x79f0
movq -0x30(%rbp), %rdi
movq -0x20(%rbp), %rax
movq 0x28(%rax), %rsi
callq 0x79b0
movq -0x20(%rbp), %rax
movq 0x20(%rax), %rax
movq %rax, -0x20(%rbp)
jmp 0x7dcf
movq -0x20(%rbp), %rax
movq 0x28(%rax), %rax
movq %rax, -0x20(%rbp)
jmp 0x7d76
cmpq $0x0, -0x20(%rbp)
je 0x7e13
movq -0x20(%rbp), %rax
movl 0x4(%rax), %eax
cmpl -0xc(%rbp), %eax
setge %al
andb $0x1, %al
movzbl %al, %eax
movq -0x20(%rbp), %rcx
movl 0x4(%rcx), %ecx
cmpl -0x10(%rbp), %ecx
setle %cl
andb $0x1, %cl
movzbl %cl, %ecx
andl %ecx, %eax
cmpl $0x0, %eax
je 0x7e11
movq -0x30(%rbp), %rdi
movq -0x20(%rbp), %rsi
callq 0x79f0
jmp 0x7e13
movq -0x18(%rbp), %rax
movq 0x28(%rax), %rax
movq %rax, -0x20(%rbp)
movq -0x30(%rbp), %rdi
movq -0x20(%rbp), %rsi
callq 0x7870
xorb $-0x1, %al
testb $0x1, %al
jne 0x7e34
jmp 0x7e7a
movl -0x10(%rbp), %eax
movq -0x20(%rbp), %rcx
cmpl 0x4(%rcx), %eax
jl 0x7e6c
movq -0x30(%rbp), %rdi
movq -0x20(%rbp), %rsi
callq 0x79f0
movq -0x30(%rbp), %rdi
movq -0x20(%rbp), %rax
movq 0x20(%rax), %rsi
callq 0x79b0
movq -0x20(%rbp), %rax
movq 0x28(%rax), %rax
movq %rax, -0x20(%rbp)
jmp 0x7e78
movq -0x20(%rbp), %rax
movq 0x20(%rax), %rax
movq %rax, -0x20(%rbp)
jmp 0x7e1f
cmpq $0x0, -0x20(%rbp)
je 0x7ebc
movq -0x20(%rbp), %rax
movl 0x4(%rax), %eax
cmpl -0xc(%rbp), %eax
setge %al
andb $0x1, %al
movzbl %al, %eax
movq -0x20(%rbp), %rcx
movl 0x4(%rcx), %ecx
cmpl -0x10(%rbp), %ecx
setle %cl
andb $0x1, %cl
movzbl %cl, %ecx
andl %ecx, %eax
cmpl $0x0, %eax
je 0x7eba
movq -0x30(%rbp), %rdi
movq -0x20(%rbp), %rsi
callq 0x79f0
jmp 0x7ebc
jmp 0x7ebe
addq $0x30, %rsp
popq %rbp
retq
nopw %cs:(%rax,%rax)