// File: diegofilbal[P]YourJam/src/lista.cpp
// Function: Lista::remove(Lista const&)
bool Lista::remove(Lista const &lista_musicas){

    if(tamanho > 0 && lista_musicas.tamanho > 0){ //  Verifica as listas não estão vazias
        for(int i = 0; i < lista_musicas.tamanho; i++){ // Percorre a lista recebida
            if(buscaMusica(*lista_musicas.buscaMusicaPos(i)) != nullptr){ // Verifica se a música atual da lista recebida está de fato na lista principal
                
                Node* temp = head; // Variável a receber cada node da lista principal no laço
                int indice = 0; // Variável para guardar a posição da música a ser removida

                while(true){ // Laço para descobrir a posição da música na lista 
                    if(temp->musica->getNome() == lista_musicas.buscaMusicaPos(i)->getNome() && temp->musica->getArtista() == lista_musicas.buscaMusicaPos(i)->getArtista()){ // Verifica se as músicas são iguais
                        break; // Interrompe o laço
                    }
                    temp = temp->next; // Avança na lista
                    indice++; // Incrementa o índice
                }

                remove(indice); // Remove a música da lista principal
            }
        }
        return true; // Retorna código de sucesso 
    }
    return false; // Retorna código de erro
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x150, %rsp            # imm = 0x150
movq %rdi, -0x10(%rbp)
movq %rsi, -0x18(%rbp)
movq -0x10(%rbp), %rax
movq %rax, -0x118(%rbp)
cmpl $0x0, 0x10(%rax)
jle 0x3823
movq -0x18(%rbp), %rax
cmpl $0x0, 0x10(%rax)
jle 0x3823
movl $0x0, -0x1c(%rbp)
movl -0x1c(%rbp), %eax
movq -0x18(%rbp), %rcx
cmpl 0x10(%rcx), %eax
jge 0x381d
movq -0x18(%rbp), %rdi
movl -0x1c(%rbp), %esi
callq 0x2fb0
movq %rax, %rsi
leaq -0x60(%rbp), %rdi
movq %rdi, -0x128(%rbp)
callq 0x3fc0
movq -0x118(%rbp), %rdi
movq -0x128(%rbp), %rsi
callq 0x3840
movq %rax, -0x120(%rbp)
jmp 0x3608
leaq -0x60(%rbp), %rdi
callq 0x135f0
movq -0x120(%rbp), %rax
cmpq $0x0, %rax
je 0x380d
movq -0x118(%rbp), %rax
movq (%rax), %rax
movq %rax, -0x78(%rbp)
movl $0x0, -0x7c(%rbp)
movq -0x78(%rbp), %rax
movq (%rax), %rsi
leaq -0xa0(%rbp), %rdi
callq 0x13620
movq -0x18(%rbp), %rdi
movl -0x1c(%rbp), %esi
movb $0x0, -0xe1(%rbp)
movb $0x0, -0x109(%rbp)
callq 0x2fb0
movq %rax, -0x130(%rbp)
jmp 0x366d
movq -0x130(%rbp), %rsi
leaq -0xc0(%rbp), %rdi
callq 0x13620
jmp 0x3682
leaq -0xa0(%rbp), %rdi
leaq -0xc0(%rbp), %rsi
callq 0x4020
movb %al, %cl
xorl %eax, %eax
testb $0x1, %cl
movb %al, -0x131(%rbp)
jne 0x36a6
jmp 0x370c
movq -0x78(%rbp), %rax
movq (%rax), %rsi
leaq -0xe0(%rbp), %rdi
callq 0x13670
jmp 0x36bb
movb $0x1, -0xe1(%rbp)
movq -0x18(%rbp), %rdi
movl -0x1c(%rbp), %esi
callq 0x2fb0
movq %rax, -0x140(%rbp)
jmp 0x36d7
movq -0x140(%rbp), %rsi
leaq -0x108(%rbp), %rdi
callq 0x13670
jmp 0x36ec
movb $0x1, -0x109(%rbp)
leaq -0xe0(%rbp), %rdi
leaq -0x108(%rbp), %rsi
callq 0x4020
movb %al, -0x131(%rbp)
movb -0x131(%rbp), %al
movb %al, -0x141(%rbp)
testb $0x1, -0x109(%rbp)
jne 0x3723
jmp 0x372f
leaq -0x108(%rbp), %rdi
callq 0x20b0
testb $0x1, -0xe1(%rbp)
jne 0x373a
jmp 0x3746
leaq -0xe0(%rbp), %rdi
callq 0x20b0
leaq -0xc0(%rbp), %rdi
callq 0x20b0
leaq -0xa0(%rbp), %rdi
callq 0x20b0
movb -0x141(%rbp), %al
testb $0x1, %al
jne 0x376a
jmp 0x37e4
jmp 0x37fe
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x68(%rbp)
movl %eax, -0x6c(%rbp)
leaq -0x60(%rbp), %rdi
callq 0x135f0
jmp 0x3835
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x68(%rbp)
movl %eax, -0x6c(%rbp)
jmp 0x37d6
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x68(%rbp)
movl %eax, -0x6c(%rbp)
jmp 0x37ca
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x68(%rbp)
movl %eax, -0x6c(%rbp)
testb $0x1, -0xe1(%rbp)
jne 0x37bc
jmp 0x37c8
leaq -0xe0(%rbp), %rdi
callq 0x20b0
jmp 0x37ca
leaq -0xc0(%rbp), %rdi
callq 0x20b0
leaq -0xa0(%rbp), %rdi
callq 0x20b0
jmp 0x3835
movq -0x78(%rbp), %rax
movq 0x8(%rax), %rax
movq %rax, -0x78(%rbp)
movl -0x7c(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x7c(%rbp)
jmp 0x3637
movq -0x118(%rbp), %rdi
movl -0x7c(%rbp), %esi
callq 0x3450
jmp 0x380f
movl -0x1c(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x1c(%rbp)
jmp 0x35bd
movb $0x1, -0x1(%rbp)
jmp 0x3827
movb $0x0, -0x1(%rbp)
movb -0x1(%rbp), %al
andb $0x1, %al
addq $0x150, %rsp            # imm = 0x150
popq %rbp
retq
movq -0x68(%rbp), %rdi
callq 0x2200
nop