// File: /workspace/github_cpp_makefile_star2_O2/Ciaxur[P]yagb-emu/include/imgui/imgui_tables.cpp
// Function: ImGui::TableHeadersRow()
void ImGui::TableHeadersRow()
{
    ImGuiContext& g = *GImGui;
    ImGuiTable* table = g.CurrentTable;
    IM_ASSERT(table != NULL && "Need to call TableHeadersRow() after BeginTable()!");

    // Layout if not already done (this is automatically done by TableNextRow, we do it here solely to facilitate stepping in debugger as it is frequent to step in TableUpdateLayout)
    if (!table->IsLayoutLocked)
        TableUpdateLayout(table);

    // Open row
    const float row_y1 = GetCursorScreenPos().y;
    const float row_height = TableGetHeaderRowHeight();
    TableNextRow(ImGuiTableRowFlags_Headers, row_height);
    if (table->HostSkipItems) // Merely an optimization, you may skip in your own code.
        return;

    const int columns_count = TableGetColumnCount();
    for (int column_n = 0; column_n < columns_count; column_n++)
    {
        if (!TableSetColumnIndex(column_n))
            continue;

        // Push an id to allow unnamed labels (generally accidental, but let's behave nicely with them)
        // - in your own code you may omit the PushID/PopID all-together, provided you know they won't collide
        // - table->InstanceCurrent is only >0 when we use multiple BeginTable/EndTable calls with same identifier.
        const char* name = TableGetColumnName(column_n);
        PushID(table->InstanceCurrent * table->ColumnsCount + column_n);
        TableHeader(name);
        PopID();
    }

    // Allow opening popup from the right-most section after the last column.
    ImVec2 mouse_pos = ImGui::GetMousePos();
    if (IsMouseReleased(1) && TableGetHoveredColumn() == columns_count)
        if (mouse_pos.y >= row_y1 && mouse_pos.y < row_y1 + row_height)
            TableOpenContextMenu(-1); // Will open a non-column-specific popup.
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x28, %rsp
leaq 0x6e1f4(%rip), %r14     # 0xe3ce0
movq (%r14), %rax
movq 0x20a8(%rax), %rbx
testq %rbx, %rbx
je 0x75c2b
cmpb $0x0, 0x248(%rbx)
jne 0x75b10
movq %rbx, %rdi
callq 0x712c6
callq 0x438bd
movaps %xmm0, -0x40(%rbp)
callq 0x75a2a
pushq $0x1
popq %rdi
movss %xmm0, -0x2c(%rbp)
callq 0x74d33
cmpb $0x0, 0x256(%rbx)
jne 0x75c1c
movaps -0x40(%rbp), %xmm0
shufps $0x55, %xmm0, %xmm0     # xmm0 = xmm0[1,1,1,1]
movaps %xmm0, -0x40(%rbp)
movq (%r14), %rax
movq 0x20a8(%rax), %rax
xorl %r14d, %r14d
movl $0x0, %r13d
testq %rax, %rax
je 0x75b60
movl 0x6c(%rax), %r13d
testl %r13d, %r13d
movl $0x0, %r12d
cmovgl %r13d, %r12d
cmpl %r14d, %r12d
je 0x75bab
movl %r14d, %edi
callq 0x75033
testb %al, %al
je 0x75ba6
movl %r14d, %edi
callq 0x74a8a
movq %rax, %r15
movswl 0x78(%rbx), %edi
imull 0x6c(%rbx), %edi
addl %r14d, %edi
callq 0x42f5a
movq %r15, %rdi
callq 0x75c4a
callq 0x42fea
incl %r14d
jmp 0x75b6d
callq 0x40359
movaps %xmm0, -0x50(%rbp)
pushq $0x1
popq %rdi
callq 0x40253
testb %al, %al
leaq 0x6e11b(%rip), %rax     # 0xe3ce0
je 0x75c1c
movq (%rax), %rax
movq 0x20a8(%rax), %rax
testq %rax, %rax
je 0x75bdf
movsbl 0x234(%rax), %eax
jmp 0x75be2
pushq $-0x1
popq %rax
cmpl %r13d, %eax
jne 0x75c1c
movaps -0x50(%rbp), %xmm0
shufps $0x55, %xmm0, %xmm0     # xmm0 = xmm0[1,1,1,1]
ucomiss -0x40(%rbp), %xmm0
jb 0x75c1c
movaps %xmm0, %xmm1
movaps -0x40(%rbp), %xmm0
addss -0x2c(%rbp), %xmm0
ucomiss %xmm1, %xmm0
jbe 0x75c1c
pushq $-0x1
popq %rdi
addq $0x28, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
jmp 0x739bb
addq $0x28, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
leaq 0x414eb(%rip), %rdi     # 0xb711d
leaq 0x404cd(%rip), %rsi     # 0xb6106
leaq 0x41525(%rip), %rcx     # 0xb7165
movl $0xa8e, %edx            # imm = 0xA8E
callq 0xc140