// File: diegofilbal[P]YourJam/src/lista.cpp
// Function: Lista::insereInicio(Musica)
bool Lista::insereInicio(Musica musica){

    if(busca(musica) == nullptr){ // Verifica se a música já está cadastrada
        // A música não está cadastrada no sistema

        Node *temp = new Node;
        temp->musica = new Musica;

        // Copia informações da música para temp
        temp->musica->setNome(musica.getNome());
        temp->musica->setArtista(musica.getArtista());

        // Atualiza o head
        temp->next = head;
        head = temp;

        if(tamanho == 1){ //  Verifica se só há um elemento na lista
            tail = temp->next; // Atualiza o tail
        }

        tamanho++; //Incrementa o tamanho da lista

        return true; // Retorna código de sucesso

    }else{
        return false; // Retorna código de erro
    }
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x100, %rsp            # imm = 0x100
movq %rsi, -0xd0(%rbp)
movq %rdi, -0x10(%rbp)
movq %rsi, -0x18(%rbp)
movq -0x10(%rbp), %rax
movq %rax, -0xc8(%rbp)
leaq -0x58(%rbp), %rdi
movq %rdi, -0xc0(%rbp)
callq 0x3fc0
movq -0xc8(%rbp), %rdi
movq -0xc0(%rbp), %rsi
callq 0x29f0
movq %rax, -0xb8(%rbp)
jmp 0x2801
leaq -0x58(%rbp), %rdi
callq 0x135f0
movq -0xb8(%rbp), %rax
cmpq $0x0, %rax
jne 0x29d5
movl $0x10, %edi
callq 0x2140
movq %rax, %rdi
movq %rdi, %rax
movq %rax, -0xd8(%rbp)
callq 0x136d0
jmp 0x2839
movq -0xd8(%rbp), %rax
movq %rax, -0x70(%rbp)
movl $0x40, %edi
callq 0x2140
movq %rax, %rdi
movq %rdi, %rax
movq %rax, -0xe0(%rbp)
callq 0x135c0
jmp 0x2862
movq -0xd0(%rbp), %rsi
movq -0xe0(%rbp), %rcx
movq -0x70(%rbp), %rax
movq %rcx, (%rax)
movq -0x70(%rbp), %rax
movq (%rax), %rax
movq %rax, -0xf0(%rbp)
leaq -0x90(%rbp), %rdi
movq %rdi, -0xe8(%rbp)
callq 0x13620
movq -0xf0(%rbp), %rdi
movq -0xe8(%rbp), %rsi
callq 0x13650
jmp 0x28ad
leaq -0x90(%rbp), %rdi
callq 0x20b0
movq -0xd0(%rbp), %rsi
movq -0x70(%rbp), %rax
movq (%rax), %rax
movq %rax, -0x100(%rbp)
leaq -0xb0(%rbp), %rdi
movq %rdi, -0xf8(%rbp)
callq 0x13670
movq -0x100(%rbp), %rdi
movq -0xf8(%rbp), %rsi
callq 0x136a0
jmp 0x28f6
leaq -0xb0(%rbp), %rdi
callq 0x20b0
movq -0xc8(%rbp), %rax
movq (%rax), %rdx
movq -0x70(%rbp), %rcx
movq %rdx, 0x8(%rcx)
movq -0x70(%rbp), %rcx
movq %rcx, (%rax)
cmpl $0x1, 0x10(%rax)
jne 0x29bf
movq -0xc8(%rbp), %rax
movq -0x70(%rbp), %rcx
movq 0x8(%rcx), %rcx
movq %rcx, 0x8(%rax)
jmp 0x29bf
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
leaq -0x58(%rbp), %rdi
callq 0x135f0
jmp 0x29e7
movq -0xd8(%rbp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
callq 0x2120
jmp 0x29e7
movq -0xe0(%rbp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
callq 0x2120
jmp 0x29e7
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
leaq -0x90(%rbp), %rdi
callq 0x20b0
jmp 0x29e7
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
leaq -0xb0(%rbp), %rdi
callq 0x20b0
jmp 0x29e7
movq -0xc8(%rbp), %rax
movl 0x10(%rax), %ecx
addl $0x1, %ecx
movl %ecx, 0x10(%rax)
movb $0x1, -0x1(%rbp)
jmp 0x29d9
movb $0x0, -0x1(%rbp)
movb -0x1(%rbp), %al
andb $0x1, %al
addq $0x100, %rsp            # imm = 0x100
popq %rbp
retq
movq -0x60(%rbp), %rdi
callq 0x2200