sandbox
Loading...
Searching...
No Matches
message_type.hpp
1// SPDX-License-Identifier: MIT
2#ifndef LIBSBX_SCRIPTING_MANAGED_MESSAGE_TYPE_HPP_
3#define LIBSBX_SCRIPTING_MANAGED_MESSAGE_TYPE_HPP_
4
5#include <functional>
6
7#include <libsbx/scripting/managed/string.hpp>
8
9namespace sbx::scripting::managed {
10
11enum class message_level {
12 info = 1 << 0,
13 warning = 1 << 1,
14 error = 1 << 2,
15 all = info | warning | error
16}; // enum class message_level
17
18template<typename Type>
19requires (std::is_enum_v<Type>)
20constexpr auto to_underlying(Type value) {
21 return static_cast<std::underlying_type_t<Type>>(value);
22}
23
24constexpr message_level operator|(const message_level lhs, const message_level rhs) noexcept {
25 return static_cast<message_level>(to_underlying(lhs) | to_underlying(rhs));
26}
27
28constexpr bool operator&(const message_level lhs, const message_level rhs) noexcept {
29 return (to_underlying(lhs) & to_underlying(rhs)) != 0;
30}
31
32constexpr message_level operator~(const message_level value) noexcept {
33 return static_cast<message_level>(~to_underlying(value));
34}
35
36constexpr message_level& operator|=(message_level& lhs, const message_level& rhs) noexcept {
37 return (lhs = (lhs | rhs));
38}
39
40} // namespace sbx::scripting::managed
41
42#endif // LIBSBX_SCRIPTING_MANAGED_MESSAGE_TYPE_HPP_