11#include "../utility/module.hpp"
19hi_warning_ignore_msvc(26490);
21namespace hi {
inline namespace v1 {
30 log_statistics = 0x04,
37 log_mask = log_debug | log_info | log_statistics | log_trace | log_audit | log_warning | log_error | log_fatal,
39 log_level_default = log_audit | log_error | log_fatal,
40 log_level_fatal = log_audit | log_fatal,
41 log_level_error = log_trace | log_error | log_level_fatal,
42 log_level_warning = log_warning | log_level_error,
43 log_level_info = log_info | log_statistics | log_level_warning,
44 log_level_debug = log_debug | log_level_info,
46 log_is_running = 0x1'00,
47 time_stamp_utc_is_running = 0x2'00,
49 system_is_running = 0x1'000000'00,
50 system_is_shutting_down = 0x2'000000'00,
51 system_mask = system_is_running | system_is_shutting_down,
71 return to_bool(to_underlying(rhs));
76 return (rhs & global_state_type::system_mask) == global_state_type::system_is_running;
81 return to_bool(rhs & global_state_type::system_is_shutting_down);
92 static constexpr bool is_always_lock_free = atomic_type::is_always_lock_free;
94 constexpr atomic()
noexcept =
default;
100 constexpr atomic(
value_type desired) noexcept : v(to_underlying(desired)) {}
107 void store(
value_type desired, std::memory_order order = std::memory_order::seq_cst)
noexcept
109 return v.
store(hi::to_underlying(desired), order);
112 [[nodiscard]]
value_type load(std::memory_order order = std::memory_order::seq_cst)
const noexcept
126 reinterpret_cast<underlying_type_t<value_type>&
>(expected), hi::to_underlying(desired), success, failure);
138 std::memory_order success,
139 std::memory_order failure)
noexcept
142 reinterpret_cast<underlying_type_t<value_type>&
>(expected), hi::to_underlying(desired), success, failure);
148 std::memory_order order = std::memory_order::seq_cst)
noexcept
185namespace hi {
inline namespace v1 {
230 hi_assert(not to_bool(log_level & ~global_state_type::log_mask));
246 hi_assert(std::popcount(to_underlying(subsystem)) == 1);
247 return to_bool(
global_state.fetch_and(~subsystem, order) & subsystem);
259 hi_assert(std::popcount(to_underlying(subsystem)) == 1);
260 return to_bool(
global_state.fetch_or(subsystem, order) & subsystem);
#define hi_assert(expression,...)
Assert if expression is true.
Definition assert.hpp:199
bool global_state_enable(global_state_type subsystem, std::memory_order order=std::memory_order::seq_cst) noexcept
Enable a subsystem.
Definition global_state.hpp:257
bool is_system_running() noexcept
Check if the HikoGUI system is running.
Definition global_state.hpp:206
std::atomic< global_state_type > global_state
The global state of the hikogui framework.
Definition global_state.hpp:198
bool global_state_disable(global_state_type subsystem, std::memory_order order=std::memory_order::seq_cst) noexcept
Disable a subsystem.
Definition global_state.hpp:244
global_state_type
The flag-type used for global state.
Definition global_state.hpp:27
bool is_system_shutting_down() noexcept
Check if the HikoGUI system is being shut down.
Definition global_state.hpp:217
void set_log_level(global_state_type log_level) noexcept
Set the logging level.
Definition global_state.hpp:227
DOXYGEN BUG.
Definition algorithm.hpp:13
geometry/margins.hpp
Definition cache.hpp:11
T compare_exchange_weak(T... args)
T is_lock_free(T... args)