// File: /workspace/github_cpp_makefile_star2_O3/nataly-enne[P]pet-fera/pet_fera_remover.cpp
// Function: remover(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>>>&)
void remover(map <int, ANFIBIO_NATIVO> &anfibios_nat, map <int, ANFIBIO_EXOTICO> &anfibios_ex){
	char op, opcao, resp, c, sucesso = 'n';
	string id_buscado_string;
	int id_buscado, verificacao, cont = 0;
	ofstream nativos;
	ofstream exoticos;
			
	do{
		cout << "É nativo ou exótico? \n n - NATIVO\n e - EXOTICO" << endl;
		cin >> opcao;
		if(opcao != 'n' && opcao != 'e'){
			cout << "Opção inválida!! Tente novamente!\n" << endl;
			cout << endl;
			cout << "Deseja sair? s/n" << endl;
			cin >> resp;
			if(resp == 's'){
				break;
			}	
		}
		else{ 
			if(opcao == 'n'){
				do{
					cout << "Insira o ID buscado: " << endl;
					if(!cont){
						cin.ignore();
						cont++;
					}
					getline(cin, id_buscado_string);
					for(int i=0; i<(int)id_buscado_string.size(); i++){
						c = id_buscado_string[i];
						verificacao = isdigit(c);
					}
					if(!verificacao){
						cout << "ERRO: apenas numeros inteiros positivos são permitidos!"<< endl << endl;
						sucesso = 'n';
					}else{
						stringstream ss(id_buscado_string);
						ss >> id_buscado;
						sucesso = 's';
					}
				}while(sucesso == 'n');

				auto result = anfibios_nat.find(id_buscado);
					
				if(result != anfibios_nat.end()){
					cout << "ID existe!" << endl;
					anfibios_nat.erase(result);

					/* A condição do map não ser vazio para escrever no arquivo foi removido, para que mesmo quando o map estiver vazio escreva no arquivo
					senão, quando o arquivo só tiver uma linha e o usuário for apagar essa linha, mesmo assim o arquivo permacerá com essa linha. */
					nativos.open("anfibios_nat.txt");
					for(auto it = anfibios_nat.begin(); it != anfibios_nat.end(); it++){
						nativos << (*it).second;
					}
						nativos.close();
					//sucesso = 's';
				}
				else{
					cout << "Animal não cadastrado!" << endl;
				}
				cout << "Deseja remover outro? s/n" << endl;
				cin >> op;

			}
			else{
				cout << "Insira o ID buscado: " << endl;
				cin >> id_buscado;

				auto result = anfibios_ex.find(id_buscado);
					
				if(result != anfibios_ex.end()){
					cout << "ID existe!" << endl;
					anfibios_ex.erase(result);

					/* A condição do map não ser vazio para escrever no arquivo foi removido, para que mesmo quando o map estiver vazio escreva no arquivo
					senão, quando o arquivo só tiver uma linha e o usuário for apagar essa linha, mesmo assim o arquivo permacerá com essa linha */
					exoticos.open("anfibios_ex.txt");
					for(auto it = anfibios_ex.begin(); it != anfibios_ex.end(); it++){
						exoticos << (*it).second;
					}
					exoticos.close();
					//sucesso = 's';
				}
				else{
					cout << "Animal não cadastrado!" << endl;
				}
				cout << "Deseja remover outro? s/n" << endl;
				cin >> op;
			}
		} // Primeiro else.
	}while(op == 's');
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x5d8, %rsp            # imm = 0x5D8
movq %rsi, -0x40(%rbp)
movq %rdi, -0x38(%rbp)
leaq -0x60(%rbp), %rax
movq %rax, -0x10(%rax)
movq $0x0, -0x8(%rax)
movb $0x0, (%rax)
leaq -0x470(%rbp), %rdi
callq 0x3360
leaq -0x270(%rbp), %rdi
callq 0x3360
movq -0x40(%rbp), %rax
addq $0x8, %rax
movq %rax, -0x50(%rbp)
movq -0x38(%rbp), %rax
addq $0x8, %rax
movq %rax, -0x48(%rbp)
xorl %r15d, %r15d
movq 0x14cbb(%rip), %r13     # 0x47fd0
movq 0x14cc4(%rip), %r14     # 0x47fe0
movl $0x30, %edx
movq %r13, %rdi
leaq 0x80ed(%rip), %rsi      # 0x3b418
callq 0x3250
movq (%r13), %rax
movq -0x18(%rax), %rdi
addq %r13, %rdi
movl $0xa, %esi
callq 0x31f0
movsbl %al, %esi
movq %r13, %rdi
callq 0x3030
movq %rax, %rdi
callq 0x3130
movq %r14, %rdi
leaq -0x2b(%rbp), %rsi
callq 0x3280
movzbl -0x2b(%rbp), %eax
cmpl $0x65, %eax
je 0x33641
cmpl $0x6e, %eax
je 0x334a7
movl $0x25, %edx
movq %r13, %rdi
leaq 0x7e88(%rip), %rsi      # 0x3b211
callq 0x3250
movq (%r13), %rax
movq -0x18(%rax), %rdi
addq %r13, %rdi
movl $0xa, %esi
callq 0x31f0
movsbl %al, %esi
movq %r13, %rdi
callq 0x3030
movq %rax, %rdi
callq 0x3130
movq (%r13), %rax
movq -0x18(%rax), %rdi
addq %r13, %rdi
movl $0xa, %esi
callq 0x31f0
movsbl %al, %esi
movq %r13, %rdi
callq 0x3030
movq %rax, %rdi
callq 0x3130
movl $0x10, %edx
movq %r13, %rdi
leaq 0x722b(%rip), %rsi      # 0x3a618
callq 0x3250
movq (%r13), %rax
movq -0x18(%rax), %rdi
addq %r13, %rdi
movl $0xa, %esi
callq 0x31f0
movsbl %al, %esi
movq %r13, %rdi
callq 0x3030
movq %rax, %rdi
callq 0x3130
movq %r14, %rdi
leaq -0x2a(%rbp), %rsi
callq 0x3280
cmpb $0x73, -0x2a(%rbp)
je 0x3388f
cmpb $0x73, -0x29(%rbp)
je 0x3331c
jmp 0x3388f
movl $0x38, %edx
movq %r13, %rdi
leaq 0x7ffb(%rip), %rsi      # 0x3b449
callq 0x3250
movq (%r13), %rax
movq -0x18(%rax), %rdi
addq %r13, %rdi
movl $0xa, %esi
callq 0x31f0
movsbl %al, %esi
movq %r13, %rdi
callq 0x3030
movq %rax, %rdi
callq 0x3130
movq %rax, %r12
movq (%rax), %rax
movq -0x18(%rax), %rdi
addq %r12, %rdi
movl $0xa, %esi
callq 0x31f0
movsbl %al, %esi
movq %r12, %rdi
callq 0x3030
xorl %ebx, %ebx
movq %rax, %rdi
callq 0x3130
movl $0x15, %edx
movq %r13, %rdi
leaq 0x7db1(%rip), %rsi      # 0x3b267
callq 0x3250
movq (%r13), %rax
movq -0x18(%rax), %rdi
addq %r13, %rdi
movl $0xa, %esi
callq 0x31f0
movsbl %al, %esi
movq %r13, %rdi
callq 0x3030
movq %rax, %rdi
callq 0x3130
testl %r15d, %r15d
jne 0x334f6
movl $0x1, %r15d
movq %r14, %rdi
callq 0x33a0
movq (%r14), %rax
movq -0x18(%rax), %rdi
addq %r14, %rdi
movl $0xa, %esi
callq 0x31f0
movsbl %al, %edx
movq %r14, %rdi
leaq -0x70(%rbp), %rsi
callq 0x33c0
movq -0x68(%rbp), %rax
testl %eax, %eax
jle 0x33536
decl %eax
movq -0x70(%rbp), %rcx
movsbl (%rcx,%rax), %eax
addl $-0x30, %eax
xorl %ebx, %ebx
cmpl $0xa, %eax
setb %bl
testl %ebx, %ebx
je 0x3343f
leaq -0x5f8(%rbp), %r12
movq %r12, %rdi
leaq -0x70(%rbp), %rsi
movl $0x18, %edx
callq 0x3310
movq %r12, %rdi
leaq -0x30(%rbp), %rsi
callq 0x3120
movq %r12, %rdi
movq 0x14a44(%rip), %rsi     # 0x47fb0
callq 0x3160
leaq -0x578(%rbp), %rdi
callq 0x30d0
movq -0x38(%rbp), %rax
movq 0x10(%rax), %rcx
testq %rcx, %rcx
je 0x335b8
movl -0x30(%rbp), %eax
movq -0x48(%rbp), %r12
xorl %edx, %edx
cmpl %eax, 0x20(%rcx)
setl %dl
cmovgeq %rcx, %r12
movq 0x10(%rcx,%rdx,8), %rcx
testq %rcx, %rcx
jne 0x33591
cmpq -0x48(%rbp), %r12
je 0x335b8
cmpl 0x20(%r12), %eax
jge 0x337ee
movl $0x17, %edx
movq %r13, %rdi
leaq 0x7ebb(%rip), %rsi      # 0x3b482
callq 0x3250
movq (%r13), %rax
movq -0x18(%rax), %rdi
addq %r13, %rdi
movl $0xa, %esi
callq 0x31f0
movsbl %al, %esi
movq %r13, %rdi
callq 0x3030
movq %rax, %rdi
callq 0x3130
movl $0x19, %edx
movq %r13, %rdi
leaq 0x7e97(%rip), %rsi      # 0x3b49a
callq 0x3250
movq (%r13), %rax
movq -0x18(%rax), %rdi
addq %r13, %rdi
movl $0xa, %esi
callq 0x31f0
movsbl %al, %esi
movq %r13, %rdi
callq 0x3030
movq %rax, %rdi
callq 0x3130
movq %r14, %rdi
leaq -0x29(%rbp), %rsi
callq 0x3280
jmp 0x33430
movl $0x15, %edx
movq %r13, %rdi
leaq 0x7c17(%rip), %rsi      # 0x3b267
callq 0x3250
movq (%r13), %rax
movq -0x18(%rax), %rdi
addq %r13, %rdi
movl $0xa, %esi
callq 0x31f0
movsbl %al, %esi
movq %r13, %rdi
callq 0x3030
movq %rax, %rdi
callq 0x3130
movq %r14, %rdi
leaq -0x30(%rbp), %rsi
callq 0x3120
movq -0x40(%rbp), %rax
movq 0x10(%rax), %rcx
testq %rcx, %rcx
je 0x336c4
movl -0x30(%rbp), %eax
movq -0x50(%rbp), %r12
xorl %edx, %edx
cmpl %eax, 0x20(%rcx)
setl %dl
cmovgeq %rcx, %r12
movq 0x10(%rcx,%rdx,8), %rcx
testq %rcx, %rcx
jne 0x3369d
cmpq -0x50(%rbp), %r12
je 0x336c4
cmpl 0x20(%r12), %eax
jge 0x3374d
movl $0x17, %edx
movq %r13, %rdi
leaq 0x7daf(%rip), %rsi      # 0x3b482
callq 0x3250
movq (%r13), %rax
movq -0x18(%rax), %rdi
addq %r13, %rdi
movl $0xa, %esi
callq 0x31f0
movsbl %al, %esi
movq %r13, %rdi
callq 0x3030
movq %rax, %rdi
callq 0x3130
movl $0x19, %edx
movq %r13, %rdi
leaq 0x7d8b(%rip), %rsi      # 0x3b49a
callq 0x3250
movq (%r13), %rax
movq -0x18(%rax), %rdi
addq %r13, %rdi
movl $0xa, %esi
callq 0x31f0
movsbl %al, %esi
movq %r13, %rdi
callq 0x3030
movq %rax, %rdi
callq 0x3130
movq %r14, %rdi
leaq -0x29(%rbp), %rsi
callq 0x3280
jmp 0x33430
movl $0xa, %edx
movq %r13, %rdi
leaq 0x7b21(%rip), %rsi      # 0x3b27d
callq 0x3250
movq (%r13), %rax
movq -0x18(%rax), %rdi
addq %r13, %rdi
movl $0xa, %esi
callq 0x31f0
movsbl %al, %esi
movq %r13, %rdi
callq 0x3030
movq %rax, %rdi
callq 0x3130
movq -0x40(%rbp), %rdi
movq %r12, %rsi
callq 0x357b8
leaq -0x270(%rbp), %rdi
leaq 0x7761(%rip), %rsi      # 0x3af04
movl $0x10, %edx
callq 0x3050
movq -0x40(%rbp), %rax
movq 0x18(%rax), %r12
cmpq -0x50(%rbp), %r12
je 0x337dd
leaq 0x28(%r12), %rsi
leaq -0x270(%rbp), %rdi
callq 0x9847
movq %r12, %rdi
callq 0x3140
movq %rax, %r12
cmpq -0x50(%rbp), %rax
jne 0x337bb
leaq -0x270(%rbp), %rdi
callq 0x32a0
jmp 0x33700
movl $0xa, %edx
movq %r13, %rdi
leaq 0x7a80(%rip), %rsi      # 0x3b27d
callq 0x3250
movq (%r13), %rax
movq -0x18(%rax), %rdi
addq %r13, %rdi
movl $0xa, %esi
callq 0x31f0
movsbl %al, %esi
movq %r13, %rdi
callq 0x3030
movq %rax, %rdi
callq 0x3130
movq -0x38(%rbp), %rdi
movq %r12, %rsi
callq 0x35782
leaq -0x470(%rbp), %rdi
leaq 0x76af(%rip), %rsi      # 0x3aef3
movl $0x10, %edx
callq 0x3050
movq -0x38(%rbp), %rax
movq 0x18(%rax), %r12
cmpq -0x48(%rbp), %r12
je 0x3387e
leaq 0x28(%r12), %rsi
leaq -0x470(%rbp), %rdi
callq 0x91cb
movq %r12, %rdi
callq 0x3140
movq %rax, %r12
cmpq -0x48(%rbp), %rax
jne 0x3385c
leaq -0x470(%rbp), %rdi
callq 0x32a0
jmp 0x335f4
movq 0x14732(%rip), %rax     # 0x47fc8
movq (%rax), %rbx
movq 0x18(%rax), %r14
leaq -0x268(%rbp), %rdi
movq %rbx, -0x8(%rdi)
movq -0x18(%rbx), %rax
movq %r14, -0x270(%rbp,%rax)
callq 0x3190
movl $0xf8, %r15d
leaq -0x270(%rbp), %rdi
addq %r15, %rdi
callq 0x30d0
leaq -0x468(%rbp), %rdi
movq %rbx, -0x8(%rdi)
movq -0x18(%rbx), %rax
movq %r14, -0x470(%rbp,%rax)
callq 0x3190
leaq -0x470(%rbp), %rdi
addq %r15, %rdi
callq 0x30d0
movq -0x70(%rbp), %rdi
leaq -0x60(%rbp), %rax
cmpq %rax, %rdi
je 0x3390b
callq 0x31d0
addq $0x5d8, %rsp            # imm = 0x5D8
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
movq %rax, %rbx
movq 0x14689(%rip), %rsi     # 0x47fb0
leaq -0x5f8(%rbp), %rdi
callq 0x3160
leaq -0x578(%rbp), %rdi
callq 0x30d0
jmp 0x3395c
jmp 0x33959
movq %rax, %rbx
jmp 0x33968
movq %rax, %rbx
jmp 0x33974
jmp 0x33959
jmp 0x33959
jmp 0x33959
jmp 0x33959
jmp 0x33959
jmp 0x33959
movq %rax, %rbx
leaq -0x270(%rbp), %rdi
callq 0x32e0
leaq -0x470(%rbp), %rdi
callq 0x32e0
movq -0x70(%rbp), %rdi
leaq -0x60(%rbp), %rax
cmpq %rax, %rdi
je 0x33986
callq 0x31d0
movq %rbx, %rdi
callq 0x3380