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

		v = splitnode->right;
		while (!isLeaf(v)) { // is not a leaf
			if (x2 >= v->data) {
				isPointInRange(v, x1, x2, y1, y2); 
				if (v->left != NULL) {
					onedqueryYtree(v->left->ytree, y1, y2);
				}
				v = v->right;
			}
			else
				v = v->left;
		}
		if (v != NULL) {
			isPointInRange(v, x1, x2, y1, y2); 
		}
	}
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x40, %rsp
movq %rdi, -0x8(%rbp)
movl %esi, -0xc(%rbp)
movl %edx, -0x10(%rbp)
movl %ecx, -0x14(%rbp)
movl %r8d, -0x18(%rbp)
movq -0x8(%rbp), %rdi
movq %rdi, -0x38(%rbp)
movq (%rdi), %rsi
movl -0xc(%rbp), %edx
movl -0x10(%rbp), %ecx
callq 0x77c0
movq -0x38(%rbp), %rdi
movq %rax, -0x20(%rbp)
movq -0x20(%rbp), %rsi
movl -0xc(%rbp), %edx
movl -0x10(%rbp), %ecx
movl -0x14(%rbp), %r8d
movl -0x18(%rbp), %r9d
callq 0x80c0
movq -0x38(%rbp), %rdi
movq -0x20(%rbp), %rsi
callq 0x7870
testb $0x1, %al
jne 0x848d
movq -0x20(%rbp), %rax
movq 0x20(%rax), %rax
movq %rax, -0x28(%rbp)
movq -0x38(%rbp), %rdi
movq -0x28(%rbp), %rsi
callq 0x7870
xorb $-0x1, %al
testb $0x1, %al
jne 0x8354
jmp 0x83bd
movl -0xc(%rbp), %eax
movq -0x28(%rbp), %rcx
cmpl 0x4(%rcx), %eax
jg 0x83af
movq -0x38(%rbp), %rdi
movq -0x28(%rbp), %rsi
movl -0xc(%rbp), %edx
movl -0x10(%rbp), %ecx
movl -0x14(%rbp), %r8d
movl -0x18(%rbp), %r9d
callq 0x80c0
movq -0x28(%rbp), %rax
cmpq $0x0, 0x28(%rax)
je 0x83a1
movq -0x38(%rbp), %rdi
movq -0x28(%rbp), %rax
movq 0x28(%rax), %rax
movq 0x30(%rax), %rsi
movl -0x14(%rbp), %edx
movl -0x18(%rbp), %ecx
callq 0x7ed0
movq -0x28(%rbp), %rax
movq 0x20(%rax), %rax
movq %rax, -0x28(%rbp)
jmp 0x83bb
movq -0x28(%rbp), %rax
movq 0x28(%rax), %rax
movq %rax, -0x28(%rbp)
jmp 0x833f
cmpq $0x0, -0x28(%rbp)
je 0x83df
movq -0x38(%rbp), %rdi
movq -0x28(%rbp), %rsi
movl -0xc(%rbp), %edx
movl -0x10(%rbp), %ecx
movl -0x14(%rbp), %r8d
movl -0x18(%rbp), %r9d
callq 0x80c0
movq -0x20(%rbp), %rax
movq 0x28(%rax), %rax
movq %rax, -0x28(%rbp)
movq -0x38(%rbp), %rdi
movq -0x28(%rbp), %rsi
callq 0x7870
xorb $-0x1, %al
testb $0x1, %al
jne 0x8400
jmp 0x8469
movl -0x10(%rbp), %eax
movq -0x28(%rbp), %rcx
cmpl 0x4(%rcx), %eax
jl 0x845b
movq -0x38(%rbp), %rdi
movq -0x28(%rbp), %rsi
movl -0xc(%rbp), %edx
movl -0x10(%rbp), %ecx
movl -0x14(%rbp), %r8d
movl -0x18(%rbp), %r9d
callq 0x80c0
movq -0x28(%rbp), %rax
cmpq $0x0, 0x20(%rax)
je 0x844d
movq -0x38(%rbp), %rdi
movq -0x28(%rbp), %rax
movq 0x20(%rax), %rax
movq 0x30(%rax), %rsi
movl -0x14(%rbp), %edx
movl -0x18(%rbp), %ecx
callq 0x7ed0
movq -0x28(%rbp), %rax
movq 0x28(%rax), %rax
movq %rax, -0x28(%rbp)
jmp 0x8467
movq -0x28(%rbp), %rax
movq 0x20(%rax), %rax
movq %rax, -0x28(%rbp)
jmp 0x83eb
cmpq $0x0, -0x28(%rbp)
je 0x848b
movq -0x38(%rbp), %rdi
movq -0x28(%rbp), %rsi
movl -0xc(%rbp), %edx
movl -0x10(%rbp), %ecx
movl -0x14(%rbp), %r8d
movl -0x18(%rbp), %r9d
callq 0x80c0
jmp 0x848d
addq $0x40, %rsp
popq %rbp
retq
nopw %cs:(%rax,%rax)