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

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

            head = new Node;
            head->musica = new Musica;

            // Copia informações da música para o head
            head->musica->setNome(musica.getNome());
            head->musica->setArtista(musica.getArtista());
            head->next = nullptr;

            tail = head; // Atualiza o tail
            tamanho++; // Incrementa o tamanho da lista

        }else{ // Caso a lista não esteja vazia

            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());
            temp->next = nullptr;

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

            tamanho++; // Incrementa o tamanho da lista
        }

        return true; // Retorna código de sucesso

    }else{
        // Música já está inserida no banco de músicas
        return false; // Retorna código de erro
    }
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0xc8, %rsp
movq %rsi, %r15
movq %rdi, %rbx
leaq -0xe8(%rbp), %r14
movq %r14, %rdi
callq 0x32fc
movq %rbx, %rdi
movq %r14, %rsi
callq 0x26dc
movq %rax, %r14
leaq -0xe8(%rbp), %rdi
callq 0xafd4
testq %r14, %r14
jne 0x295a
movq (%rbx), %r13
pushq $0x10
popq %rdi
callq 0x2120
movq %rax, %r12
testq %r13, %r13
je 0x28cf
movq %r12, %rdi
callq 0xb040
pushq $0x40
popq %rdi
callq 0x2120
movq %rax, %r13
movq %rax, %rdi
callq 0xafac
movq %r13, (%r12)
leaq -0x68(%rbp), %rdi
movq %r15, %rsi
callq 0xaff4
movq %r13, %rdi
leaq -0x68(%rbp), %rsi
callq 0xb00c
leaq -0x68(%rbp), %rdi
callq 0x2070
movq (%r12), %r13
leaq -0x48(%rbp), %rdi
movq %r15, %rsi
callq 0xb016
movq %r13, %rdi
leaq -0x48(%rbp), %rsi
callq 0xb032
leaq -0x48(%rbp), %rdi
callq 0x2070
andq $0x0, 0x8(%r12)
movq 0x8(%rbx), %rax
movq %r12, 0x8(%rax)
movq %r12, 0x8(%rbx)
jmp 0x2957
movq %r12, %rdi
callq 0xb040
movq %r12, (%rbx)
pushq $0x40
popq %rdi
callq 0x2120
movq %rax, %r12
movq %rax, %rdi
callq 0xafac
movq (%rbx), %rax
movq %r12, (%rax)
leaq -0xa8(%rbp), %r13
movq %r13, %rdi
movq %r15, %rsi
callq 0xaff4
movq %r12, %rdi
movq %r13, %rsi
callq 0xb00c
leaq -0xa8(%rbp), %rdi
callq 0x2070
movq (%rbx), %rax
movq (%rax), %r12
leaq -0x88(%rbp), %r13
movq %r13, %rdi
movq %r15, %rsi
callq 0xb016
movq %r12, %rdi
movq %r13, %rsi
callq 0xb032
leaq -0x88(%rbp), %rdi
callq 0x2070
movq (%rbx), %rax
andq $0x0, 0x8(%rax)
movq %rax, 0x8(%rbx)
incl 0x10(%rbx)
testq %r14, %r14
sete %al
addq $0xc8, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
movq %rax, %rbx
leaq -0x88(%rbp), %rdi
jmp 0x299e
movq %rax, %rbx
leaq -0xa8(%rbp), %rdi
jmp 0x299e
jmp 0x29ad
jmp 0x29ad
movq %rax, %rbx
leaq -0x48(%rbp), %rdi
jmp 0x299e
movq %rax, %rbx
leaq -0x68(%rbp), %rdi
callq 0x2070
jmp 0x29c9
movq %rax, %rbx
movq %r13, %rdi
jmp 0x29b3
movq %rax, %rbx
movq %r12, %rdi
callq 0x2100
jmp 0x29c9
movq %rax, %rbx
leaq -0xe8(%rbp), %rdi
callq 0xafd4
movq %rbx, %rdi
callq 0x21a0
nop