8#if HI_OPERATING_SYSTEM == HI_OS_WINDOWS
9#include "console_win32.hpp"
11#include "debugger_intf.hpp"
22hi_export_module(hikogui.utility.initialize);
24hi_export
namespace hi {
28enum class initialize_state_type {
34inline thread_local uint16_t initialize_thread_id_dummy;
39[[nodiscard]]
inline uintptr_t initialize_thread_id() noexcept
44 return std::bit_cast<uintptr_t>(
std::addressof(initialize_thread_id_dummy));
47inline std::atomic<uintptr_t> initialize_state = 0;
60 using namespace std::literals;
62 uintptr_t expected = 0;
63 if (detail::initialize_state.compare_exchange_strong(expected, detail::initialize_thread_id(), std::memory_order::acquire)) {
78 detail::initialize_state.store(1, std::memory_order::release);
80 }
else if (expected == detail::initialize_thread_id()) {
81 set_debug_message(
"hi::initialize() re-enterred from same thread.");
87 while (detail::initialize_state.
load(std::memory_order::acquire) != 1) {
Utilities for throwing exceptions and terminating the application.
The HikoGUI namespace.
Definition array_generic.hpp:21
The HikoGUI API version 1.
Definition array_generic.hpp:22
void start_console() noexcept
Start the console.
Definition console_win32.hpp:21
void initialize() noexcept
Initialize base functionality of HikoGUI.
Definition initialize.hpp:58
constexpr Out load(In const *src) noexcept
Unaligned Load of a numeric value from an array.
Definition endian.hpp:80