#pragma once #include enum class memory_permission : uint8_t { none = 0, read = 1 << 0, write = 1 << 1, exec = 1 << 2, read_write = read | write, all = read | write | exec }; /***************************************************************************** * ****************************************************************************/ inline constexpr memory_permission operator&(const memory_permission x, const memory_permission y) { return static_cast (static_cast(x) & static_cast(y)); } inline constexpr memory_permission operator|(const memory_permission x, const memory_permission y) { return static_cast (static_cast(x) | static_cast(y)); } inline constexpr memory_permission operator^(const memory_permission x, const memory_permission y) { return static_cast (static_cast(x) ^ static_cast(y)); } inline constexpr memory_permission operator~(memory_permission x) { return static_cast(~static_cast(x)); } inline memory_permission& operator&=(memory_permission& x, const memory_permission y) { x = x & y; return x; } inline memory_permission& operator|=(memory_permission& x, const memory_permission y) { x = x | y; return x; } inline memory_permission& operator^=(memory_permission& x, const memory_permission y) { x = x ^ y; return x; }