// File: /workspace/github_cpp_makefile_star2_O3/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 0x6f57c(%rip), %r12     # 0xfbcd0
movq (%r12), %rax
movq 0x20a8(%rax), %rbx
testq %rbx, %rbx
je 0x8c898
cmpb $0x0, 0x248(%rbx)
jne 0x8c779
movq %rbx, %rdi
callq 0x87673
callq 0x559ee
movaps %xmm0, -0x50(%rbp)
callq 0x8c685
movl $0x1, %edi
movss %xmm0, -0x2c(%rbp)
callq 0x8b850
cmpb $0x0, 0x256(%rbx)
jne 0x8c889
movq (%r12), %rax
movq 0x20a8(%rax), %rax
testq %rax, %rax
je 0x8c812
movl 0x6c(%rax), %r13d
testl %r13d, %r13d
jle 0x8c815
xorl %r14d, %r14d
movl %r14d, %edi
callq 0x8bb7c
testb %al, %al
je 0x8c808
movq (%r12), %rax
movq 0x20a8(%rax), %rdi
testq %rdi, %rdi
je 0x8c7e8
movl %r14d, %esi
callq 0x8b537
movq %rax, %r15
jmp 0x8c7eb
xorl %r15d, %r15d
movswl 0x78(%rbx), %edi
imull 0x6c(%rbx), %edi
addl %r14d, %edi
callq 0x54e5e
movq %r15, %rdi
callq 0x8c8b7
callq 0x55082
incl %r14d
cmpl %r14d, %r13d
jne 0x8c7bf
jmp 0x8c815
xorl %r13d, %r13d
callq 0x517df
movaps %xmm0, -0x40(%rbp)
movl $0x1, %edi
callq 0x516d9
testb %al, %al
je 0x8c889
movq (%r12), %rax
movq 0x20a8(%rax), %rax
testq %rax, %rax
je 0x8c845
movsbl 0x234(%rax), %eax
jmp 0x8c84a
movl $0xffffffff, %eax       # imm = 0xFFFFFFFF
cmpl %r13d, %eax
jne 0x8c889
movaps -0x50(%rbp), %xmm1
shufps $0x55, %xmm1, %xmm1     # xmm1 = xmm1[1,1,1,1]
movaps -0x40(%rbp), %xmm3
shufps $0x55, %xmm3, %xmm3     # xmm3 = xmm3[1,1,1,1]
ucomiss %xmm1, %xmm3
jb 0x8c889
movaps %xmm1, %xmm0
addss -0x2c(%rbp), %xmm0
ucomiss %xmm3, %xmm0
jbe 0x8c889
movl $0xffffffff, %edi       # imm = 0xFFFFFFFF
addq $0x28, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
jmp 0x8a23f
addq $0x28, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
leaq 0x43602(%rip), %rdi     # 0xcfea1
leaq 0x425e4(%rip), %rsi     # 0xcee8a
leaq 0x4363c(%rip), %rcx     # 0xcfee9
movl $0xa8e, %edx            # imm = 0xA8E
callq 0xc140