// File: /workspace/github_cpp_makefile_star2_O2/nataly-enne[P]pet-fera/pet_fera_remover.cpp
// Function: remover(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>>>&)
void remover(map <int, MAMIFERO_NATIVO> &mamiferos_nat, map <int, MAMIFERO_EXOTICO> &mamiferos_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 exotico? \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 = mamiferos_nat.find(id_buscado);
					
				if(result != mamiferos_nat.end()){
					cout << "ID existe!" << endl;
					mamiferos_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("mamiferos_nat.txt");
					for(auto it = mamiferos_nat.begin(); it != mamiferos_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 = mamiferos_ex.find(id_buscado);
					
				if(result != mamiferos_ex.end()){
					cout << "ID existe!" << endl;
					mamiferos_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("mamiferos_ex.txt");
					for(auto it = mamiferos_ex.begin(); it != mamiferos_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)
andq $0x0, -0x8(%rax)
movb $0x0, (%rax)
leaq -0x470(%rbp), %rdi
callq 0x3350
leaq -0x270(%rbp), %rdi
callq 0x3350
movq -0x40(%rbp), %rax
addq $0x8, %rax
movq %rax, -0x50(%rbp)
movq -0x38(%rbp), %rax
addq $0x8, %rax
movq %rax, -0x48(%rbp)
movq 0x12367(%rip), %r15     # 0x30fc8
movq 0x12378(%rip), %r13     # 0x30fe0
xorl %r14d, %r14d
movq %r15, %rdi
leaq 0x5582(%rip), %rsi      # 0x241f7
callq 0x31f0
movq %rax, %rdi
callq 0x3110
movq %r13, %rdi
leaq -0x2b(%rbp), %rsi
callq 0x3280
movzbl -0x2b(%rbp), %eax
cmpl $0x65, %eax
je 0x1ee3a
cmpl $0x6e, %eax
je 0x1ed1d
movq %r15, %rdi
leaq 0x5527(%rip), %rsi      # 0x241d1
callq 0x31f0
movq %rax, %rdi
callq 0x3110
movq %r15, %rdi
callq 0x3110
movq %r15, %rdi
leaq 0x490f(%rip), %rsi      # 0x235d8
callq 0x31f0
movq %rax, %rdi
callq 0x3110
movq %r13, %rdi
leaq -0x2a(%rbp), %rsi
callq 0x3280
cmpb $0x73, -0x2a(%rbp)
je 0x1ef75
cmpb $0x73, -0x29(%rbp)
je 0x1ec6b
jmp 0x1ef75
movq %r15, %rdi
leaq 0x5704(%rip), %rsi      # 0x24409
callq 0x31f0
movq %rax, %rdi
callq 0x3110
xorl %r12d, %r12d
movq %rax, %rdi
callq 0x3110
movq %r15, %rdi
leaq 0x5500(%rip), %rsi      # 0x24227
callq 0x31f0
movq %rax, %rdi
callq 0x3110
testl %r14d, %r14d
jne 0x1ed45
movq %r13, %rdi
callq 0x3380
pushq $0x1
popq %r14
movq %r13, %rdi
leaq -0x70(%rbp), %rsi
callq 0x3060
movl -0x68(%rbp), %eax
movq -0x70(%rbp), %rcx
testl %eax, %eax
movl $0x0, %edx
cmovlel %edx, %eax
xorl %edx, %edx
cmpq %rdx, %rax
je 0x1ed7f
movsbl (%rcx,%rdx), %esi
addl $-0x30, %esi
xorl %r12d, %r12d
cmpl $0xa, %esi
setb %r12b
incq %rdx
jmp 0x1ed64
testl %r12d, %r12d
je 0x1ecfb
leaq -0x5f8(%rbp), %rbx
movq %rbx, %rdi
leaq -0x70(%rbp), %rsi
pushq $0x18
popq %rdx
callq 0x3300
movq %rbx, %rdi
leaq -0x30(%rbp), %rbx
movq %rbx, %rsi
callq 0x3150
leaq -0x5f8(%rbp), %rdi
callq 0x3170
movq -0x38(%rbp), %rdi
movq %rbx, %rsi
callq 0x1e440
movq %rax, %rbx
cmpq -0x48(%rbp), %rax
je 0x1ef36
movq %r15, %rdi
leaq 0x5461(%rip), %rsi      # 0x2423d
callq 0x31f0
movq %rax, %rdi
callq 0x3110
movq -0x38(%rbp), %rdi
movq %rbx, %rsi
callq 0x1fe70
leaq -0x470(%rbp), %rdi
leaq 0x51b6(%rip), %rsi      # 0x23fb9
pushq $0x10
popq %rdx
callq 0x3040
movq -0x38(%rbp), %rax
movq 0x18(%rax), %rbx
cmpq -0x48(%rbp), %rbx
je 0x1eee9
leaq 0x28(%rbx), %rsi
leaq -0x470(%rbp), %rdi
callq 0x82d3
movq %rbx, %rdi
callq 0x3160
movq %rax, %rbx
jmp 0x1ee13
movq %r15, %rdi
leaq 0x53e3(%rip), %rsi      # 0x24227
callq 0x31f0
movq %rax, %rdi
callq 0x3110
movq %r13, %rdi
leaq -0x30(%rbp), %rsi
callq 0x3150
movq -0x40(%rbp), %rdi
leaq -0x30(%rbp), %rsi
callq 0x1e498
movq %rax, %rbx
cmpq -0x50(%rbp), %rax
je 0x1eef7
movq %r15, %rdi
leaq 0x53bc(%rip), %rsi      # 0x2423d
callq 0x31f0
movq %rax, %rdi
callq 0x3110
movq -0x40(%rbp), %rdi
movq %rbx, %rsi
callq 0x1fed2
leaq -0x270(%rbp), %rdi
leaq 0x5123(%rip), %rsi      # 0x23fcb
pushq $0x10
popq %rdx
callq 0x3040
movq -0x40(%rbp), %rax
movq 0x18(%rax), %rbx
cmpq -0x50(%rbp), %rbx
je 0x1eedb
leaq 0x28(%rbx), %rsi
leaq -0x270(%rbp), %rdi
callq 0x86cd
movq %rbx, %rdi
callq 0x3160
movq %rax, %rbx
jmp 0x1eeb8
leaq -0x270(%rbp), %rdi
callq 0x32a0
jmp 0x1ef0e
leaq -0x470(%rbp), %rdi
callq 0x32a0
jmp 0x1ef4d
movq %r15, %rdi
leaq 0x5541(%rip), %rsi      # 0x24442
callq 0x31f0
movq %rax, %rdi
callq 0x3110
movq %r15, %rdi
leaq 0x5542(%rip), %rsi      # 0x2445a
callq 0x31f0
movq %rax, %rdi
callq 0x3110
movq %r13, %rdi
leaq -0x29(%rbp), %rsi
callq 0x3280
jmp 0x1ecec
movq %r15, %rdi
leaq 0x5502(%rip), %rsi      # 0x24442
callq 0x31f0
movq %rax, %rdi
callq 0x3110
movq %r15, %rdi
leaq 0x5503(%rip), %rsi      # 0x2445a
callq 0x31f0
movq %rax, %rdi
callq 0x3110
movq %r13, %rdi
leaq -0x29(%rbp), %rsi
callq 0x3280
jmp 0x1ecec
leaq -0x270(%rbp), %rdi
callq 0x32e0
leaq -0x470(%rbp), %rdi
callq 0x32e0
leaq -0x70(%rbp), %rdi
callq 0x3100
addq $0x5d8, %rsp            # imm = 0x5D8
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
movq %rax, %rbx
leaq -0x5f8(%rbp), %rdi
callq 0x3170
jmp 0x1efd4
jmp 0x1efd1
movq %rax, %rbx
jmp 0x1efe0
movq %rax, %rbx
jmp 0x1efec
jmp 0x1efd1
jmp 0x1efd1
jmp 0x1efd1
jmp 0x1efd1
jmp 0x1efd1
jmp 0x1efd1
movq %rax, %rbx
leaq -0x270(%rbp), %rdi
callq 0x32e0
leaq -0x470(%rbp), %rdi
callq 0x32e0
leaq -0x70(%rbp), %rdi
callq 0x3100
movq %rbx, %rdi
callq 0x3370