// File: /workspace/github_cpp_makefile_star2_O2/nataly-enne[P]pet-fera/pet_fera_pesquisar.cpp
// Function: pesquisar_classe(std::map<int, ANFIBIO_NATIVO, std::less<int>, std::allocator<std::pair<int const, ANFIBIO_NATIVO>>>&, std::map<int, ANFIBIO_EXOTICO, std::less<int>, std::allocator<std::pair<int const, ANFIBIO_EXOTICO>>>&, std::map<int, MAMIFERO_NATIVO, std::less<int>, std::allocator<std::pair<int const, MAMIFERO_NATIVO>>>&, std::map<int, MAMIFERO_EXOTICO, std::less<int>, std::allocator<std::pair<int const, MAMIFERO_EXOTICO>>>&, std::map<int, REPTIL_NATIVO, std::less<int>, std::allocator<std::pair<int const, REPTIL_NATIVO>>>&, std::map<int, REPTIL_EXOTICO, std::less<int>, std::allocator<std::pair<int const, REPTIL_EXOTICO>>>&, std::map<int, AVE_NATIVO, std::less<int>, std::allocator<std::pair<int const, AVE_NATIVO>>>&, std::map<int, AVE_EXOTICO, std::less<int>, std::allocator<std::pair<int const, AVE_EXOTICO>>>&)
void pesquisar_classe(map <int, ANFIBIO_NATIVO> &anfibios_nat, map <int, ANFIBIO_EXOTICO> &anfibios_ex, map <int, MAMIFERO_NATIVO> &mamiferos_nat, map <int, MAMIFERO_EXOTICO> &mamiferos_ex, map <int, REPTIL_NATIVO> &repteis_nat, map <int, REPTIL_EXOTICO> &repteis_ex, map <int, AVE_NATIVO> &aves_nat, map <int, AVE_EXOTICO> &aves_ex){
	int classe, cont = 0;
	string classe_string;
	char sucesso = 'n', ok = 'n';

	do{
		do{
			cout << "Digite a opção referente a classe que deseja pesquisar: \n  1-Amphibia\n  2-Mammalia\n  3-Reptilia\n  4-Aves" << endl;
			if(!cont){
				cin.ignore();
				cont++;
			}
			getline(cin, classe_string);
			if(classe_string != "1" && classe_string != "2" && classe_string != "3" && classe_string != "4"){
				ok = 'n';
			}
			else{
				ok = 's';
				stringstream ss(classe_string);
				ss >> classe;
			}
		}while(ok == 'n');
		switch (classe){
			case 1:
				imprimir_classe(anfibios_nat, anfibios_ex); // Chama função que imprime a classe anfíbio.
				sucesso = 's';
				break;
			case 2:
				imprimir_classe(mamiferos_nat, mamiferos_ex); // Chama função que imprime a classe mamífero.
				sucesso = 's';
				break;
			case 3:
				imprimir_classe(repteis_nat, repteis_ex); // Chama função que imprime a classe réptil.
				sucesso = 's';
				break;
			case 4:
				imprimir_classe(aves_nat, aves_ex); // Chama função que imprime a classe ave.
				sucesso = 's';
				break;
			default:
				cout << "Opcao não existe!! Tente novamente." << endl;
				cout << "Deseja sair? s/n" << endl;
				cin >> sucesso;	
		}
	}while(sucesso != 's');
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x1e8, %rsp            # imm = 0x1E8
movq %r9, -0x60(%rbp)
movq %r8, -0x50(%rbp)
movq %rcx, -0x58(%rbp)
movq %rdx, -0x40(%rbp)
movq %rsi, -0x48(%rbp)
movq %rdi, -0x38(%rbp)
leaq -0x70(%rbp), %rax
movq %rax, -0x10(%rax)
andq $0x0, -0x8(%rax)
movb $0x0, (%rax)
leaq -0x29(%rbp), %rax
movb $0x6e, (%rax)
movb $0x1, %r14b
movq 0x25bbf(%rip), %r15     # 0x30fc8
movq 0x25bd0(%rip), %r13     # 0x30fe0
leaq -0x80(%rbp), %rbx
leaq -0x208(%rbp), %r12
movq %r15, %rdi
leaq 0x18123(%rip), %rsi     # 0x23548
callq 0x31f0
movq %rax, %rdi
callq 0x3110
testb $0x1, %r14b
je 0xb440
movq %r13, %rdi
callq 0x3380
movq %r13, %rdi
movq %rbx, %rsi
callq 0x3060
movq %rbx, %rdi
leaq 0x17cac(%rip), %rsi     # 0x23101
callq 0xb86b
testb %al, %al
je 0xb49a
movq %rbx, %rdi
leaq 0x18540(%rip), %rsi     # 0x239a8
callq 0xb86b
testb %al, %al
je 0xb49a
movq %rbx, %rdi
leaq 0x17cbf(%rip), %rsi     # 0x2313a
callq 0xb86b
testb %al, %al
je 0xb49a
movq %rbx, %rdi
leaq 0x17cc8(%rip), %rsi     # 0x23156
callq 0xb86b
xorl %r14d, %r14d
testb %al, %al
jne 0xb41b
movq %r12, %rdi
movq %rbx, %rsi
pushq $0x18
popq %rdx
callq 0x3300
movq %r12, %rdi
leaq -0x30(%rbp), %rsi
callq 0x3150
movq %r12, %rdi
callq 0x3170
movl -0x30(%rbp), %eax
decl %eax
cmpl $0x3, %eax
jbe 0xb50f
movq %r15, %rdi
leaq 0x180e3(%rip), %rsi     # 0x235b3
callq 0x31f0
movq %rax, %rdi
callq 0x3110
movq %r15, %rdi
leaq 0x180f1(%rip), %rsi     # 0x235d8
callq 0x31f0
movq %rax, %rdi
callq 0x3110
movq %r13, %rdi
leaq -0x29(%rbp), %rsi
callq 0x3280
xorl %r14d, %r14d
cmpb $0x73, -0x29(%rbp)
jne 0xb41b
jmp 0xb559
leaq 0x18022(%rip), %rcx     # 0x23538
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movq -0x38(%rbp), %rdi
movq -0x48(%rbp), %rsi
callq 0xb59f
jmp 0xb559
movq -0x50(%rbp), %rdi
movq -0x60(%rbp), %rsi
callq 0xb705
jmp 0xb559
movq 0x10(%rbp), %rdi
movq 0x18(%rbp), %rsi
callq 0xb7b8
jmp 0xb559
movq -0x40(%rbp), %rdi
movq -0x58(%rbp), %rsi
callq 0xb652
leaq -0x80(%rbp), %rdi
callq 0x3100
addq $0x1e8, %rsp            # imm = 0x1E8
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
jmp 0xb58b
movq %rax, %rbx
leaq -0x208(%rbp), %rdi
callq 0x3170
jmp 0xb58e
jmp 0xb58b
jmp 0xb58b
movq %rax, %rbx
leaq -0x80(%rbp), %rdi
callq 0x3100
movq %rbx, %rdi
callq 0x3370