11#include "../utility/utility.hpp"
12#include "../macros.hpp"
18hi_export_module(hikogui.concurrency.global_state);
24hi_warning_ignore_msvc(26490);
26hi_export
namespace hi {
inline namespace v1 {
35 log_statistics = 0x04,
42 log_mask = log_debug | log_info | log_statistics | log_trace | log_audit | log_warning | log_error | log_fatal,
44 log_level_default = log_audit | log_error | log_fatal,
45 log_level_fatal = log_audit | log_fatal,
46 log_level_error = log_trace | log_error | log_level_fatal,
47 log_level_warning = log_warning | log_level_error,
48 log_level_info = log_info | log_statistics | log_level_warning,
49 log_level_debug = log_debug | log_level_info,
51 log_is_running = 0x1'00,
52 time_stamp_utc_is_running = 0x2'00,
54 system_is_running = 0x1'000000'00,
55 system_is_shutting_down = 0x2'000000'00,
56 system_mask = system_is_running | system_is_shutting_down,
61 return static_cast<global_state_type>(std::to_underlying(lhs) | std::to_underlying(rhs));
66 return static_cast<global_state_type>(std::to_underlying(lhs) & std::to_underlying(rhs));
76 return to_bool(std::to_underlying(rhs));
81 return (rhs & global_state_type::system_mask) == global_state_type::system_is_running;
86 return to_bool(rhs & global_state_type::system_is_shutting_down);
97 constexpr static bool is_always_lock_free = atomic_type::is_always_lock_free;
99 constexpr atomic()
noexcept =
default;
105 constexpr atomic(
value_type desired) noexcept : v(std::to_underlying(desired)) {}
112 void store(
value_type desired, std::memory_order order = std::memory_order::seq_cst)
noexcept
114 return v.
store(std::to_underlying(desired), order);
117 [[nodiscard]]
value_type load(std::memory_order order = std::memory_order::seq_cst)
const noexcept
131 reinterpret_cast<underlying_type_t<value_type>&
>(expected), std::to_underlying(desired), success, failure);
143 std::memory_order success,
144 std::memory_order failure)
noexcept
147 reinterpret_cast<underlying_type_t<value_type>&
>(expected), std::to_underlying(desired), success, failure);
153 std::memory_order order = std::memory_order::seq_cst)
noexcept
190hi_export
namespace hi {
inline namespace v1 {
235 hi_assert(
not to_bool(
log_level & ~global_state_type::log_mask));
251 hi_assert(std::popcount(std::to_underlying(
subsystem)) == 1);
264 hi_assert(std::popcount(std::to_underlying(
subsystem)) == 1);
hi_inline bool is_system_running() noexcept
Check if the HikoGUI system is running.
Definition global_state.hpp:211
hi_inline std::atomic< global_state_type > global_state
The global state of the hikogui framework.
Definition global_state.hpp:203
hi_inline 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:249
global_state_type
The flag-type used for global state.
Definition global_state.hpp:32
hi_inline void set_log_level(global_state_type log_level) noexcept
Set the logging level.
Definition global_state.hpp:232
hi_inline 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:262
hi_inline bool is_system_shutting_down() noexcept
Check if the HikoGUI system is being shut down.
Definition global_state.hpp:222
DOXYGEN BUG.
Definition algorithm_misc.hpp:20
The HikoGUI namespace.
Definition recursive_iterator.hpp:15
constexpr Out narrow_cast(In const &rhs) noexcept
Cast numeric values without loss of precision.
Definition cast.hpp:378
T compare_exchange_weak(T... args)
T is_lock_free(T... args)