// File: rocket323[P]fishdb/./pager.cpp
// Function: fishdb::Pager::NewPage(fishdb::PageType)
std::shared_ptr<MemPage> Pager::NewPage(PageType type)
{
    std::shared_ptr<MemPage> mp;
    if (m_db_header->free_list != -1)
    {
        mp = ReadPage(m_db_header->free_list);
        m_db_header->free_list = mp->header.next_free;
    }
    else
    {
        mp = std::make_shared<MemPage>();
        mp->header.page_no = m_db_header->total_pages++;
    }
    // init page
    auto &header = mp->header;
    header.type = type;
    header.next_free = -1;
    header.of_page_no = -1;
    header.data_size = 0;
    header.page_cnt = 1;
    header.is_leaf = true;

    if (type == TREE_PAGE &&
            m_pages.find(mp->header.page_no) == m_pages.end())
        CachePage(mp);

    return mp;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0xb0, %rsp
movq %rdi, -0x88(%rbp)
movq %rdi, %rax
movq %rax, -0x80(%rbp)
movq %rdi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
movl %edx, -0x14(%rbp)
movq -0x10(%rbp), %rax
movq %rax, -0x78(%rbp)
movb $0x0, -0x15(%rbp)
callq 0x8b40
movq -0x78(%rbp), %rax
movq 0x30(%rax), %rax
cmpq $-0x1, (%rax)
je 0xe3a3
movq -0x78(%rbp), %rsi
movq 0x30(%rsi), %rax
movq (%rax), %rdx
leaq -0x28(%rbp), %rdi
callq 0xe870
jmp 0xe359
movq -0x88(%rbp), %rdi
leaq -0x28(%rbp), %rsi
callq 0x41d0
leaq -0x28(%rbp), %rdi
callq 0x27e0
movq -0x88(%rbp), %rdi
callq 0x4190
movq %rax, %rcx
movq -0x78(%rbp), %rax
movq 0x10(%rcx), %rcx
movq 0x30(%rax), %rax
movq %rcx, (%rax)
jmp 0xe3f8
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x30(%rbp)
movl %eax, -0x34(%rbp)
jmp 0xe51d
leaq -0x48(%rbp), %rdi
callq 0xf2e0
jmp 0xe3ae
movq -0x88(%rbp), %rdi
leaq -0x48(%rbp), %rsi
callq 0x41d0
leaq -0x48(%rbp), %rdi
callq 0x27e0
movq -0x78(%rbp), %rax
movq -0x88(%rbp), %rdi
movq 0x30(%rax), %rax
movq 0x10(%rax), %rcx
movq %rcx, -0x90(%rbp)
addq $0x1, %rcx
movq %rcx, 0x10(%rax)
callq 0x4190
movq -0x90(%rbp), %rcx
movq %rcx, (%rax)
movq -0x88(%rbp), %rdi
callq 0x4190
movq %rax, -0x50(%rbp)
movl -0x14(%rbp), %eax
movb %al, %cl
movq -0x50(%rbp), %rax
movb %cl, 0x8(%rax)
movq -0x50(%rbp), %rax
movq $-0x1, 0x10(%rax)
movq -0x50(%rbp), %rax
movq $-0x1, 0x18(%rax)
movq -0x50(%rbp), %rax
movl $0x0, 0x20(%rax)
movq -0x50(%rbp), %rax
movw $0x1, 0x24(%rax)
movq -0x50(%rbp), %rax
movb $0x1, 0x26(%rax)
xorl %eax, %eax
cmpl $0x2, -0x14(%rbp)
movb %al, -0x91(%rbp)
jne 0xe4a3
movq -0x88(%rbp), %rdi
callq 0x4190
movq -0x78(%rbp), %rdi
movq %rax, %rsi
callq 0xf380
movq %rax, -0xa0(%rbp)
jmp 0xe478
movq -0x78(%rbp), %rdi
movq -0xa0(%rbp), %rax
movq %rax, -0x58(%rbp)
callq 0xf3b0
movq %rax, -0x60(%rbp)
leaq -0x58(%rbp), %rdi
leaq -0x60(%rbp), %rsi
callq 0xf350
movb %al, -0x91(%rbp)
movb -0x91(%rbp), %al
testb $0x1, %al
jne 0xe4af
jmp 0xe4fa
movq -0x88(%rbp), %rsi
leaq -0x70(%rbp), %rdi
movq %rdi, -0xa8(%rbp)
callq 0x40f0
movq -0x78(%rbp), %rdi
movq -0xa8(%rbp), %rsi
callq 0xead0
jmp 0xe4d8
leaq -0x70(%rbp), %rdi
callq 0x27e0
jmp 0xe4fa
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x30(%rbp)
movl %eax, -0x34(%rbp)
leaq -0x70(%rbp), %rdi
callq 0x27e0
jmp 0xe51d
movb $0x1, -0x15(%rbp)
testb $0x1, -0x15(%rbp)
jne 0xe510
movq -0x88(%rbp), %rdi
callq 0x27e0
movq -0x80(%rbp), %rax
addq $0xb0, %rsp
popq %rbp
retq
movq -0x88(%rbp), %rdi
callq 0x27e0
movq -0x30(%rbp), %rdi
callq 0x2370
nopw %cs:(%rax,%rax)