// File: 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
subq $0x220, %rsp            # imm = 0x220
movq 0x18(%rbp), %rax
movq 0x10(%rbp), %rax
movq %rdi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
movq %rdx, -0x18(%rbp)
movq %rcx, -0x20(%rbp)
movq %r8, -0x28(%rbp)
movq %r9, -0x30(%rbp)
movl $0x0, -0x38(%rbp)
leaq -0x58(%rbp), %rdi
callq 0x3300
movb $0x6e, -0x59(%rbp)
movb $0x6e, -0x5a(%rbp)
jmp 0x134a5
movq 0x3db0c(%rip), %rdi     # 0x50fb8
leaq 0x2e095(%rip), %rsi     # 0x41548
callq 0x3240
movq %rax, -0x200(%rbp)
jmp 0x134c1
movq -0x200(%rbp), %rdi
movq 0x3dad1(%rip), %rsi     # 0x50fa0
callq 0x3280
jmp 0x134d6
cmpl $0x0, -0x38(%rbp)
jne 0x13506
movq 0x3daf5(%rip), %rdi     # 0x50fd8
callq 0x33f0
jmp 0x134ea
movl -0x38(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x38(%rbp)
jmp 0x13506
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x68(%rbp)
movl %eax, -0x6c(%rbp)
jmp 0x1374b
movq 0x3dacb(%rip), %rdi     # 0x50fd8
leaq -0x58(%rbp), %rsi
callq 0x3070
jmp 0x13518
leaq 0x2dbe2(%rip), %rsi     # 0x41101
leaq -0x58(%rbp), %rdi
callq 0x13c60
movb %al, -0x201(%rbp)
jmp 0x13530
movb -0x201(%rbp), %al
testb $0x1, %al
jne 0x1353c
jmp 0x135ae
leaq 0x2e465(%rip), %rsi     # 0x419a8
leaq -0x58(%rbp), %rdi
callq 0x13c60
movb %al, -0x202(%rbp)
jmp 0x13554
movb -0x202(%rbp), %al
testb $0x1, %al
jne 0x13560
jmp 0x135ae
leaq 0x2dbd3(%rip), %rsi     # 0x4113a
leaq -0x58(%rbp), %rdi
callq 0x13c60
movb %al, -0x203(%rbp)
jmp 0x13578
movb -0x203(%rbp), %al
testb $0x1, %al
jne 0x13584
jmp 0x135ae
leaq 0x2dbcb(%rip), %rsi     # 0x41156
leaq -0x58(%rbp), %rdi
callq 0x13c60
movb %al, -0x204(%rbp)
jmp 0x1359c
movb -0x204(%rbp), %al
testb $0x1, %al
jne 0x135a8
jmp 0x135ae
movb $0x6e, -0x5a(%rbp)
jmp 0x1361e
movb $0x73, -0x5a(%rbp)
movl $0x10, %edi
movl $0x8, %esi
callq 0x13c90
movl %eax, -0x208(%rbp)
jmp 0x135c9
movl -0x208(%rbp), %edx
leaq -0x1f8(%rbp), %rdi
leaq -0x58(%rbp), %rsi
callq 0x3370
jmp 0x135e1
leaq -0x1f8(%rbp), %rdi
leaq -0x34(%rbp), %rsi
callq 0x3170
jmp 0x135f3
leaq -0x1f8(%rbp), %rdi
callq 0x31b0
jmp 0x1361e
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x68(%rbp)
movl %eax, -0x6c(%rbp)
leaq -0x1f8(%rbp), %rdi
callq 0x31b0
jmp 0x1374b
jmp 0x13620
movsbl -0x5a(%rbp), %eax
cmpl $0x6e, %eax
je 0x134a5
movl -0x34(%rbp), %eax
decl %eax
movl %eax, %ecx
movq %rcx, -0x210(%rbp)
subl $0x3, %eax
ja 0x136b4
movq -0x210(%rbp), %rax
leaq 0x2deea(%rip), %rcx     # 0x41538
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movq -0x8(%rbp), %rdi
movq -0x10(%rbp), %rsi
callq 0x13760
jmp 0x13666
movb $0x73, -0x59(%rbp)
jmp 0x1372a
movq -0x18(%rbp), %rdi
movq -0x20(%rbp), %rsi
callq 0x138a0
jmp 0x1367e
movb $0x73, -0x59(%rbp)
jmp 0x1372a
movq -0x28(%rbp), %rdi
movq -0x30(%rbp), %rsi
callq 0x139e0
jmp 0x13696
movb $0x73, -0x59(%rbp)
jmp 0x1372a
movq 0x10(%rbp), %rdi
movq 0x18(%rbp), %rsi
callq 0x13b20
jmp 0x136ae
movb $0x73, -0x59(%rbp)
jmp 0x1372a
movq 0x3d8fd(%rip), %rdi     # 0x50fb8
leaq 0x2def1(%rip), %rsi     # 0x415b3
callq 0x3240
movq %rax, -0x218(%rbp)
jmp 0x136d0
movq -0x218(%rbp), %rdi
movq 0x3d8c2(%rip), %rsi     # 0x50fa0
callq 0x3280
jmp 0x136e5
movq 0x3d8cc(%rip), %rdi     # 0x50fb8
leaq 0x2dee5(%rip), %rsi     # 0x415d8
callq 0x3240
movq %rax, -0x220(%rbp)
jmp 0x13701
movq -0x220(%rbp), %rdi
movq 0x3d891(%rip), %rsi     # 0x50fa0
callq 0x3280
jmp 0x13716
movq 0x3d8bb(%rip), %rdi     # 0x50fd8
leaq -0x59(%rbp), %rsi
callq 0x32e0
jmp 0x13728
jmp 0x1372a
jmp 0x1372c
movsbl -0x59(%rbp), %eax
cmpl $0x73, %eax
jne 0x134a3
leaq -0x58(%rbp), %rdi
callq 0x3180
addq $0x220, %rsp            # imm = 0x220
popq %rbp
retq
leaq -0x58(%rbp), %rdi
callq 0x3180
movq -0x68(%rbp), %rdi
callq 0x33d0
nopl (%rax)