// File: diegofilbal[P]YourJam/src/playlist.cpp
// Function: Playlist::operator-(Musica const&) const
Playlist* Playlist::operator-(Musica const &musica) const{

    // Insere todas as músicas da playlist local utilizando o método sobrecarregado de inserção
    Playlist* playlist_final = new Playlist(*this);

    if(playlist_final->getLista()->buscaMusica(musica)){ // Verifica se a música recebida por parâmetro está na playlist
        for(int i = 0; i < playlist_final->getLista()->getTamanho(); i++){ // Percorre a lista e procura a posição em que a música a ser removida está posicionada
            if(playlist_final->getLista()->buscaMusicaPos(i)->getNome() == musica.getNome() && playlist_final->getLista()->buscaMusicaPos(i)->getArtista() == musica.getArtista()){
                playlist_final->remove(i); // Remove a música
            }
        }
    }

    return playlist_final;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x150, %rsp            # imm = 0x150
movq %rdi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
movq -0x8(%rbp), %rax
movq %rax, -0x110(%rbp)
movl $0x30, %edi
callq 0x2140
movq -0x110(%rbp), %rsi
movq %rax, %rdi
movq %rdi, %rax
movq %rax, -0x108(%rbp)
callq 0x13780
jmp 0x14033
movq -0x108(%rbp), %rax
movq %rax, -0x18(%rbp)
movq -0x18(%rbp), %rdi
callq 0x139a0
movq %rax, -0x128(%rbp)
movq -0x10(%rbp), %rsi
leaq -0x68(%rbp), %rdi
movq %rdi, -0x120(%rbp)
callq 0x3fc0
movq -0x128(%rbp), %rdi
movq -0x120(%rbp), %rsi
callq 0x3840
movq %rax, -0x118(%rbp)
jmp 0x1407e
leaq -0x68(%rbp), %rdi
callq 0x135f0
movq -0x118(%rbp), %rax
cmpq $0x0, %rax
je 0x142bb
movl $0x0, -0x6c(%rbp)
movl -0x6c(%rbp), %eax
movl %eax, -0x12c(%rbp)
movq -0x18(%rbp), %rdi
callq 0x139a0
movq %rax, %rdi
callq 0x2f90
movl %eax, %ecx
movl -0x12c(%rbp), %eax
cmpl %ecx, %eax
jge 0x142b9
movq -0x18(%rbp), %rdi
callq 0x139a0
movq %rax, %rdi
movl -0x6c(%rbp), %esi
callq 0x2fb0
movq %rax, %rsi
leaq -0x90(%rbp), %rdi
callq 0x13620
movq -0x10(%rbp), %rsi
movb $0x0, -0xd1(%rbp)
movb $0x0, -0xf9(%rbp)
leaq -0xb0(%rbp), %rdi
callq 0x13620
jmp 0x1410c
leaq -0x90(%rbp), %rdi
leaq -0xb0(%rbp), %rsi
callq 0x4020
movb %al, %cl
xorl %eax, %eax
testb $0x1, %cl
movb %al, -0x12d(%rbp)
jne 0x14130
jmp 0x141a8
movq -0x18(%rbp), %rdi
callq 0x139a0
movq %rax, -0x138(%rbp)
jmp 0x14142
movq -0x138(%rbp), %rdi
movl -0x6c(%rbp), %esi
callq 0x2fb0
movq %rax, -0x140(%rbp)
jmp 0x1415a
movq -0x140(%rbp), %rsi
leaq -0xd0(%rbp), %rdi
callq 0x13670
jmp 0x1416f
movb $0x1, -0xd1(%rbp)
movq -0x10(%rbp), %rsi
leaq -0xf8(%rbp), %rdi
callq 0x13670
jmp 0x14188
movb $0x1, -0xf9(%rbp)
leaq -0xd0(%rbp), %rdi
leaq -0xf8(%rbp), %rsi
callq 0x4020
movb %al, -0x12d(%rbp)
movb -0x12d(%rbp), %al
movb %al, -0x141(%rbp)
testb $0x1, -0xf9(%rbp)
jne 0x141bf
jmp 0x141cb
leaq -0xf8(%rbp), %rdi
callq 0x20b0
testb $0x1, -0xd1(%rbp)
jne 0x141d6
jmp 0x141e2
leaq -0xd0(%rbp), %rdi
callq 0x20b0
leaq -0xb0(%rbp), %rdi
callq 0x20b0
leaq -0x90(%rbp), %rdi
callq 0x20b0
movb -0x141(%rbp), %al
testb $0x1, %al
jne 0x14209
jmp 0x142a9
movq -0x18(%rbp), %rdi
movl -0x6c(%rbp), %esi
callq 0x13a50
jmp 0x142a9
movq -0x108(%rbp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x20(%rbp)
movl %eax, -0x24(%rbp)
callq 0x2120
jmp 0x142c8
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x20(%rbp)
movl %eax, -0x24(%rbp)
leaq -0x68(%rbp), %rdi
callq 0x135f0
jmp 0x142c8
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x20(%rbp)
movl %eax, -0x24(%rbp)
jmp 0x1429b
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x20(%rbp)
movl %eax, -0x24(%rbp)
jmp 0x1428f
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x20(%rbp)
movl %eax, -0x24(%rbp)
testb $0x1, -0xd1(%rbp)
jne 0x14281
jmp 0x1428d
leaq -0xd0(%rbp), %rdi
callq 0x20b0
jmp 0x1428f
leaq -0xb0(%rbp), %rdi
callq 0x20b0
leaq -0x90(%rbp), %rdi
callq 0x20b0
jmp 0x142c8
jmp 0x142ab
movl -0x6c(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x6c(%rbp)
jmp 0x1409f
jmp 0x142bb
movq -0x18(%rbp), %rax
addq $0x150, %rsp            # imm = 0x150
popq %rbp
retq
movq -0x20(%rbp), %rdi
callq 0x2200
nopw %cs:(%rax,%rax)