// File: /workspace/github_cpp_makefile_star2_O2/DaCasBe[P]Gestion-de-asignaturas-mediante-arboles-binarios-ordenados/nodoEnlazadoArbolBinarioEstudiante.cpp
// Function: ed::NodoEnlazadoArbolBinarioEstudiante::insert(ed::Estudiante const&)
void ed::NodoEnlazadoArbolBinarioEstudiante::insert(ed::Estudiante const &item){
	//Precondición
	#ifndef NDEBUG
		assert(!exists(item));
	#endif

	if(isEmpty()){ //La lista esta vacía
		setItem(item); //Insertamos el ítem en el nodo raíz
	}

	else{ //La lista no esta vacía
		if(item<getItem()){ //El ítem es menor que el del nodo actual
			if(hasLeftTree()){ //El nodo actual tiene hijo izquierdo
				getLeftTree()->insert(item); //Insertamos el ítem en el subárbol hijo izquierdo
			}

			else{ //El nodo actual no tiene hijo izquierdo
				//Creamos un nuevo nodo con los datos del ítem a insertar y lo enlazamos como corresponde
				ed::NodoEnlazadoArbolBinarioEstudiante * nuevo;
				nuevo=new ed::NodoEnlazadoArbolBinarioEstudiante();

				nuevo->setItem(item);
				nuevo->setLeftTree(NULL);
				nuevo->setRightTree(NULL);
				nuevo->setParent(this);

				setLeftTree(nuevo);
			}
		}

		else{ //El ítem es mayor que el del nodo actual
			if(hasRightTree()){ //El nodo actual tiene hijo derecho
				getRightTree()->insert(item); //Insertamos el ítem en el subárbol hijo derecho
			}

			else{ //El nodo actual no tiene hijo derecho
				//Creamos un nuevo nodo con los datos del ítem a insertar y lo enlazamos como corresponde
				ed::NodoEnlazadoArbolBinarioEstudiante * nuevo;
				nuevo=new ed::NodoEnlazadoArbolBinarioEstudiante();

				nuevo->setItem(item);
				nuevo->setLeftTree(NULL);
				nuevo->setRightTree(NULL);
				nuevo->setParent(this);

				setRightTree(nuevo);
			}
		}
	}

	//Postcondición
	#ifndef NDEBUG
		assert(exists(item));
	#endif
}

// Assembly:
pushq %r15
pushq %r14
pushq %rbx
movq %rsi, %rbx
movq %rdi, %r14
callq 0x2a80
testb %al, %al
jne 0x2dae
cmpq $0x0, 0x8(%r14)
movq (%r14), %rax
movq %r14, %rdi
je 0x2d41
callq *0x10(%rax)
movq %rbx, %rdi
movq %rax, %rsi
callq 0x284c
testb %al, %al
je 0x2d49
movq 0x10(%r14), %rdi
testq %rdi, %rdi
jne 0x2d52
pushq $0x28
popq %rdi
callq 0x2170
movq %rax, %r15
leaq 0x7f3c(%rip), %rax      # 0xac50
movq %rax, (%r15)
xorps %xmm0, %xmm0
movups %xmm0, 0x8(%r15)
movups %xmm0, 0x18(%r15)
movq %r15, %rdi
movq %rbx, %rsi
callq 0x330c
xorps %xmm0, %xmm0
movups %xmm0, 0x10(%r15)
movq %r14, 0x20(%r15)
movq %r15, 0x10(%r14)
jmp 0x2d99
movq %rbx, %rsi
callq *0x18(%rax)
jmp 0x2d99
movq 0x18(%r14), %rdi
testq %rdi, %rdi
je 0x2d5c
movq %rbx, %rsi
callq 0x2cc2
jmp 0x2d99
pushq $0x28
popq %rdi
callq 0x2170
movq %rax, %r15
leaq 0x7ee2(%rip), %rax      # 0xac50
movq %rax, (%r15)
xorps %xmm0, %xmm0
movups %xmm0, 0x8(%r15)
movups %xmm0, 0x18(%r15)
movq %r15, %rdi
movq %rbx, %rsi
callq 0x330c
xorps %xmm0, %xmm0
movups %xmm0, 0x10(%r15)
movq %r14, 0x20(%r15)
movq %r15, 0x18(%r14)
movq %r14, %rdi
movq %rbx, %rsi
callq 0x2a80
testb %al, %al
je 0x2dcd
popq %rbx
popq %r14
popq %r15
retq
leaq 0x4544(%rip), %rdi      # 0x72f9
leaq 0x4394(%rip), %rsi      # 0x7150
leaq 0x4544(%rip), %rcx      # 0x7307
movl $0xba, %edx
callq 0x2110
leaq 0x4526(%rip), %rdi      # 0x72fa
leaq 0x4375(%rip), %rsi      # 0x7150
leaq 0x4525(%rip), %rcx      # 0x7307
movl $0xeb, %edx
callq 0x2110