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,
92 static constexpr bool is_always_lock_free = atomic_type::is_always_lock_free;
94 constexpr atomic()
noexcept =
default;
95 atomic(atomic
const&) =
delete;
97 atomic&
operator=(atomic
const&) =
delete;
100 constexpr atomic(value_type desired) noexcept : v(to_underlying(desired)) {}
104 return v.is_lock_free();
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
114 return static_cast<value_type
>(v.load(order));
117 [[nodiscard]] value_type
exchange(value_type desired, std::memory_order order = std::memory_order::seq_cst)
noexcept
119 return static_cast<value_type
>(v.exchange(hi::to_underlying(desired), order));
123 compare_exchange_weak(value_type& expected, value_type desired, std::memory_order success, std::memory_order failure)
noexcept
125 return v.compare_exchange_weak(
126 reinterpret_cast<underlying_type_t<value_type>&
>(expected), hi::to_underlying(desired), success, failure);
130 compare_exchange_weak(value_type& expected, value_type desired, std::memory_order order = std::memory_order::seq_cst)
noexcept
136 value_type& expected,
138 std::memory_order success,
139 std::memory_order failure)
noexcept
141 return v.compare_exchange_weak(
142 reinterpret_cast<underlying_type_t<value_type>&
>(expected), hi::to_underlying(desired), success, failure);
146 value_type& expected,
148 std::memory_order order = std::memory_order::seq_cst)
noexcept
153 value_type
fetch_and(value_type arg, std::memory_order order = std::memory_order::seq_cst)
noexcept
155 return static_cast<value_type
>(v.fetch_and(hi::to_underlying(arg), order));
158 value_type
fetch_or(value_type arg, std::memory_order order = std::memory_order::seq_cst)
noexcept
160 return static_cast<value_type
>(v.fetch_or(hi::to_underlying(arg), order));
163 operator value_type()
const noexcept
168 value_type
operator=(value_type desired)
noexcept
174 value_type
operator|=(value_type arg)
noexcept
179 value_type
operator&=(value_type arg)
noexcept
#define hi_assert(expression,...)
Assert if expression is true.
Definition assert.hpp:199
std::atomic< global_state_type > global_state
The global state of the hikogui framework.
Definition global_state.hpp:198