// File: 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
subq $0x700, %rsp            # imm = 0x700
movq %rdi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
movb $0x6e, -0x15(%rbp)
leaq -0x38(%rbp), %rdi
callq 0x3300
movl $0x0, -0x44(%rbp)
leaq -0x248(%rbp), %rdi
callq 0x33b0
jmp 0x38c15
leaq -0x458(%rbp), %rdi
callq 0x33b0
jmp 0x38c23
jmp 0x38c25
movq 0x1838c(%rip), %rdi     # 0x50fb8
leaq 0x97a5(%rip), %rsi      # 0x423d8
callq 0x3240
movq %rax, -0x660(%rbp)
jmp 0x38c41
movq -0x660(%rbp), %rdi
movq 0x18351(%rip), %rsi     # 0x50fa0
callq 0x3280
jmp 0x38c56
movq 0x1837b(%rip), %rdi     # 0x50fd8
leaq -0x12(%rbp), %rsi
callq 0x32e0
jmp 0x38c68
movsbl -0x12(%rbp), %eax
cmpl $0x6e, %eax
je 0x38d63
movsbl -0x12(%rbp), %eax
cmpl $0x65, %eax
je 0x38d63
movq 0x1832f(%rip), %rdi     # 0x50fb8
leaq 0x9541(%rip), %rsi      # 0x421d1
callq 0x3240
movq %rax, -0x668(%rbp)
jmp 0x38c9e
movq -0x668(%rbp), %rdi
movq 0x182f4(%rip), %rsi     # 0x50fa0
callq 0x3280
jmp 0x38cb3
movq 0x182fe(%rip), %rdi     # 0x50fb8
movq 0x182df(%rip), %rsi     # 0x50fa0
callq 0x3280
jmp 0x38cc8
movq 0x182e9(%rip), %rdi     # 0x50fb8
leaq 0x8902(%rip), %rsi      # 0x415d8
callq 0x3240
movq %rax, -0x670(%rbp)
jmp 0x38ce4
movq -0x670(%rbp), %rdi
movq 0x182ae(%rip), %rsi     # 0x50fa0
callq 0x3280
jmp 0x38cf9
movq 0x182d8(%rip), %rdi     # 0x50fd8
leaq -0x13(%rbp), %rsi
callq 0x32e0
jmp 0x38d0b
movsbl -0x13(%rbp), %eax
cmpl $0x73, %eax
jne 0x38d5e
jmp 0x3930b
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x250(%rbp)
movl %eax, -0x254(%rbp)
jmp 0x3934d
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x250(%rbp)
movl %eax, -0x254(%rbp)
jmp 0x39341
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x250(%rbp)
movl %eax, -0x254(%rbp)
jmp 0x39335
jmp 0x392fc
movsbl -0x12(%rbp), %eax
cmpl $0x6e, %eax
jne 0x390ec
jmp 0x38d72
movq 0x1823f(%rip), %rdi     # 0x50fb8
leaq 0x94a7(%rip), %rsi      # 0x42227
callq 0x3240
movq %rax, -0x678(%rbp)
jmp 0x38d8e
movq -0x678(%rbp), %rdi
movq 0x18204(%rip), %rsi     # 0x50fa0
callq 0x3280
jmp 0x38da3
cmpl $0x0, -0x44(%rbp)
jne 0x38dc0
movq 0x18228(%rip), %rdi     # 0x50fd8
callq 0x33f0
jmp 0x38db7
movl -0x44(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x44(%rbp)
movq 0x18211(%rip), %rdi     # 0x50fd8
leaq -0x38(%rbp), %rsi
callq 0x3070
jmp 0x38dd2
movl $0x0, -0x45c(%rbp)
movl -0x45c(%rbp), %eax
movl %eax, -0x67c(%rbp)
leaq -0x38(%rbp), %rdi
callq 0x31a0
movq %rax, %rcx
movl -0x67c(%rbp), %eax
cmpl %ecx, %eax
jge 0x38e40
movslq -0x45c(%rbp), %rsi
leaq -0x38(%rbp), %rdi
callq 0x3430
movq %rax, -0x688(%rbp)
jmp 0x38e17
movq -0x688(%rbp), %rax
movb (%rax), %al
movb %al, -0x14(%rbp)
movsbl -0x14(%rbp), %edi
callq 0x3220
movl %eax, -0x40(%rbp)
movl -0x45c(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x45c(%rbp)
jmp 0x38ddc
cmpl $0x0, -0x40(%rbp)
jne 0x38e99
movq 0x1816b(%rip), %rdi     # 0x50fb8
leaq 0x95b5(%rip), %rsi      # 0x42409
callq 0x3240
movq %rax, -0x690(%rbp)
jmp 0x38e62
movq -0x690(%rbp), %rdi
movq 0x18130(%rip), %rsi     # 0x50fa0
callq 0x3280
movq %rax, -0x698(%rbp)
jmp 0x38e7e
movq -0x698(%rbp), %rdi
movq 0x18114(%rip), %rsi     # 0x50fa0
callq 0x3280
jmp 0x38e93
movb $0x6e, -0x15(%rbp)
jmp 0x38f0f
movl $0x10, %edi
movl $0x8, %esi
callq 0x13c90
movl %eax, -0x69c(%rbp)
jmp 0x38eb0
movl -0x69c(%rbp), %edx
leaq -0x5e8(%rbp), %rdi
leaq -0x38(%rbp), %rsi
callq 0x3370
jmp 0x38ec8
leaq -0x5e8(%rbp), %rdi
leaq -0x3c(%rbp), %rsi
callq 0x3170
jmp 0x38eda
movb $0x73, -0x15(%rbp)
leaq -0x5e8(%rbp), %rdi
callq 0x31b0
jmp 0x38f0f
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x250(%rbp)
movl %eax, -0x254(%rbp)
leaq -0x5e8(%rbp), %rdi
callq 0x31b0
jmp 0x39335
jmp 0x38f11
movsbl -0x15(%rbp), %eax
cmpl $0x6e, %eax
je 0x38d72
movq -0x8(%rbp), %rdi
leaq -0x3c(%rbp), %rsi
callq 0x37590
movq %rax, -0x6a8(%rbp)
jmp 0x38f34
movq -0x6a8(%rbp), %rax
movq %rax, -0x5f0(%rbp)
movq -0x8(%rbp), %rdi
callq 0x13d10
movq %rax, -0x5f8(%rbp)
leaq -0x5f0(%rbp), %rdi
leaq -0x5f8(%rbp), %rsi
callq 0x13ce0
testb $0x1, %al
jne 0x38f6e
jmp 0x39071
movq 0x18043(%rip), %rdi     # 0x50fb8
leaq 0x92c1(%rip), %rsi      # 0x4223d
callq 0x3240
movq %rax, -0x6b0(%rbp)
jmp 0x38f8a
movq -0x6b0(%rbp), %rdi
movq 0x18008(%rip), %rsi     # 0x50fa0
callq 0x3280
jmp 0x38f9f
movq -0x8(%rbp), %rdi
movq -0x5f0(%rbp), %rax
movq %rax, -0x600(%rbp)
movq -0x600(%rbp), %rsi
callq 0x3b3e0
movq %rax, -0x6b8(%rbp)
jmp 0x38fc6
movq -0x6b8(%rbp), %rax
movq %rax, -0x608(%rbp)
leaq 0x8ed8(%rip), %rsi      # 0x41eb3
leaq -0x248(%rbp), %rdi
movl $0x10, %edx
callq 0x3050
jmp 0x38fee
movq -0x8(%rbp), %rdi
callq 0x13cb0
movq %rax, -0x610(%rbp)
movq -0x8(%rbp), %rdi
callq 0x13d10
movq %rax, -0x618(%rbp)
leaq -0x610(%rbp), %rdi
leaq -0x618(%rbp), %rsi
callq 0x13ce0
testb $0x1, %al
jne 0x39027
jmp 0x39061
leaq -0x610(%rbp), %rdi
callq 0x1fb80
movq %rax, %rsi
addq $0x8, %rsi
leaq -0x248(%rbp), %rdi
callq 0xc850
jmp 0x39048
jmp 0x3904a
leaq -0x610(%rbp), %rdi
xorl %esi, %esi
callq 0x13d70
movq %rax, -0x620(%rbp)
jmp 0x38ffe
leaq -0x248(%rbp), %rdi
callq 0x3310
jmp 0x3906f
jmp 0x390a4
movq 0x17f40(%rip), %rdi     # 0x50fb8
leaq 0x93c3(%rip), %rsi      # 0x42442
callq 0x3240
movq %rax, -0x6c0(%rbp)
jmp 0x3908d
movq -0x6c0(%rbp), %rdi
movq 0x17f05(%rip), %rsi     # 0x50fa0
callq 0x3280
jmp 0x390a2
jmp 0x390a4
movq 0x17f0d(%rip), %rdi     # 0x50fb8
leaq 0x93a8(%rip), %rsi      # 0x4245a
callq 0x3240
movq %rax, -0x6c8(%rbp)
jmp 0x390c0
movq -0x6c8(%rbp), %rdi
movq 0x17ed2(%rip), %rsi     # 0x50fa0
callq 0x3280
jmp 0x390d5
movq 0x17efc(%rip), %rdi     # 0x50fd8
leaq -0x11(%rbp), %rsi
callq 0x32e0
jmp 0x390e7
jmp 0x392fa
movq 0x17ec5(%rip), %rdi     # 0x50fb8
leaq 0x912d(%rip), %rsi      # 0x42227
callq 0x3240
movq %rax, -0x6d0(%rbp)
jmp 0x39108
movq -0x6d0(%rbp), %rdi
movq 0x17e8a(%rip), %rsi     # 0x50fa0
callq 0x3280
jmp 0x3911d
movq 0x17eb4(%rip), %rdi     # 0x50fd8
leaq -0x3c(%rbp), %rsi
callq 0x3170
jmp 0x3912f
movq -0x10(%rbp), %rdi
leaq -0x3c(%rbp), %rsi
callq 0x37610
movq %rax, -0x6d8(%rbp)
jmp 0x39145
movq -0x6d8(%rbp), %rax
movq %rax, -0x628(%rbp)
movq -0x10(%rbp), %rdi
callq 0x13e10
movq %rax, -0x630(%rbp)
leaq -0x628(%rbp), %rdi
leaq -0x630(%rbp), %rsi
callq 0x13de0
testb $0x1, %al
jne 0x3917f
jmp 0x39282
movq 0x17e32(%rip), %rdi     # 0x50fb8
leaq 0x90b0(%rip), %rsi      # 0x4223d
callq 0x3240
movq %rax, -0x6e0(%rbp)
jmp 0x3919b
movq -0x6e0(%rbp), %rdi
movq 0x17df7(%rip), %rsi     # 0x50fa0
callq 0x3280
jmp 0x391b0
movq -0x10(%rbp), %rdi
movq -0x628(%rbp), %rax
movq %rax, -0x638(%rbp)
movq -0x638(%rbp), %rsi
callq 0x3b420
movq %rax, -0x6e8(%rbp)
jmp 0x391d7
movq -0x6e8(%rbp), %rax
movq %rax, -0x640(%rbp)
leaq 0x8cd8(%rip), %rsi      # 0x41ec4
leaq -0x458(%rbp), %rdi
movl $0x10, %edx
callq 0x3050
jmp 0x391ff
movq -0x10(%rbp), %rdi
callq 0x13db0
movq %rax, -0x648(%rbp)
movq -0x10(%rbp), %rdi
callq 0x13e10
movq %rax, -0x650(%rbp)
leaq -0x648(%rbp), %rdi
leaq -0x650(%rbp), %rsi
callq 0x13de0
testb $0x1, %al
jne 0x39238
jmp 0x39272
leaq -0x648(%rbp), %rdi
callq 0x1fbc0
movq %rax, %rsi
addq $0x8, %rsi
leaq -0x458(%rbp), %rdi
callq 0xce50
jmp 0x39259
jmp 0x3925b
leaq -0x648(%rbp), %rdi
xorl %esi, %esi
callq 0x13e70
movq %rax, -0x658(%rbp)
jmp 0x3920f
leaq -0x458(%rbp), %rdi
callq 0x3310
jmp 0x39280
jmp 0x392b5
movq 0x17d2f(%rip), %rdi     # 0x50fb8
leaq 0x91b2(%rip), %rsi      # 0x42442
callq 0x3240
movq %rax, -0x6f0(%rbp)
jmp 0x3929e
movq -0x6f0(%rbp), %rdi
movq 0x17cf4(%rip), %rsi     # 0x50fa0
callq 0x3280
jmp 0x392b3
jmp 0x392b5
movq 0x17cfc(%rip), %rdi     # 0x50fb8
leaq 0x9197(%rip), %rsi      # 0x4245a
callq 0x3240
movq %rax, -0x6f8(%rbp)
jmp 0x392d1
movq -0x6f8(%rbp), %rdi
movq 0x17cc1(%rip), %rsi     # 0x50fa0
callq 0x3280
jmp 0x392e6
movq 0x17ceb(%rip), %rdi     # 0x50fd8
leaq -0x11(%rbp), %rsi
callq 0x32e0
jmp 0x392f8
jmp 0x392fa
jmp 0x392fc
jmp 0x392fe
movsbl -0x11(%rbp), %eax
cmpl $0x73, %eax
je 0x38c25
leaq -0x458(%rbp), %rdi
callq 0x3340
leaq -0x248(%rbp), %rdi
callq 0x3340
leaq -0x38(%rbp), %rdi
callq 0x3180
addq $0x700, %rsp            # imm = 0x700
popq %rbp
retq
leaq -0x458(%rbp), %rdi
callq 0x3340
leaq -0x248(%rbp), %rdi
callq 0x3340
leaq -0x38(%rbp), %rdi
callq 0x3180
movq -0x250(%rbp), %rdi
callq 0x33d0
nopw %cs:(%rax,%rax)