From 44f5fa5c8f258e8fc1f7d7e2e45e0485bd6cc490 Mon Sep 17 00:00:00 2001 From: rtk0c Date: Wed, 31 Mar 2021 20:19:18 -0700 Subject: Complete items tab (UI and serialization) --- core/src/Utils/Enum.hpp | 164 ++++++++++++++++++++++++------------------------ 1 file changed, 82 insertions(+), 82 deletions(-) (limited to 'core/src/Utils/Enum.hpp') diff --git a/core/src/Utils/Enum.hpp b/core/src/Utils/Enum.hpp index 5075155..e774b01 100644 --- a/core/src/Utils/Enum.hpp +++ b/core/src/Utils/Enum.hpp @@ -1,82 +1,82 @@ -#pragma once - -#include - -template -struct BasicEnum { - using Self = TSelf; - using ValueType = int; - - int value; - - BasicEnum() - : value{ 0 } {} - BasicEnum(int value) - : value{ value } {} - - /// Comparsion between 2 values of enum. Useful for situations like `a == b` where both a and b are TSelf. - friend auto operator<=>(const TSelf& a, const TSelf& b) { return a.value <=> b.value; } - /// Comparsion between a enum and a raw value. Useful for situations like `a == TSelf::Option` where a is a enum and TSelf::Option is a raw value. - friend auto operator<=>(const TSelf& self, int value) { return self.value <=> value; } - - operator int() const { return value; } - operator bool() const { return value; } -}; - -#define ENUM(Name) struct Name : public BasicEnum -#define ENUM_MEMBERS() \ - enum Enum : int; \ - operator Enum() const { return (Enum)value; } \ - using BasicEnum::BasicEnum; \ - enum Enum : int - -template -struct BasicFlag { - using Self = TSelf; - using ValueType = int; - - int value; - - BasicFlag() - : value{ 0 } {} - BasicFlag(int value) - : value{ value } {} - - bool IsSet(TSelf mask) const { return (value & mask.value) == mask.value; } - bool IsSetExclusive(TSelf mask) const { return value == mask.value; } - void Set(TSelf mask, bool state) { - if (state) { - value = (int)(value | mask.value); - } else { - value = (int)(value & ~mask.value); - } - } - - /// Comparsion between 2 values of flag. Useful for situations like `a == b` where both a and b are TSelf. - friend bool operator==(const TSelf& a, const TSelf& b) { return a.value == b.value; } - friend auto operator<=>(const TSelf& a, const TSelf& b) { return a.value <=> b.value; } - /// Comparsion between a flag and a raw value. Useful for situations like `a == TSelf::Option` where a is a flag and TSelf::Option is a raw value. - friend bool operator==(const TSelf& self, int value) { return self.value == value; } - friend auto operator<=>(const TSelf& self, int value) { return self.value <=> value; } - - friend TSelf operator&(const TSelf& a, const TSelf& b) { return TSelf(a.value & b.value); } - friend TSelf operator|(const TSelf& a, const TSelf& b) { return TSelf(a.value | b.value); } - friend TSelf operator^(const TSelf& a, const TSelf& b) { return TSelf(a.value ^ b.value); } - - TSelf operator~() const { return TSelf(~value); } - - TSelf& operator&=(int that) { - value = value & that; - return *this; - } - - TSelf& operator|=(int that) { - value = value | that; - return *this; - } - - TSelf& operator^=(int that) { - value = value ^ that; - return *this; - } -}; +#pragma once + +#include + +template +struct BasicEnum { + using Self = TSelf; + using ValueType = int; + + int value; + + BasicEnum() + : value{ 0 } {} + BasicEnum(int value) + : value{ value } {} + + /// Comparsion between 2 values of enum. Useful for situations like `a == b` where both a and b are TSelf. + friend auto operator<=>(const TSelf& a, const TSelf& b) { return a.value <=> b.value; } + /// Comparsion between a enum and a raw value. Useful for situations like `a == TSelf::Option` where a is a enum and TSelf::Option is a raw value. + friend auto operator<=>(const TSelf& self, int value) { return self.value <=> value; } + + operator int() const { return value; } + operator bool() const { return value; } +}; + +#define ENUM(Name) struct Name : public BasicEnum +#define ENUM_MEMBERS() \ + enum Enum : int; \ + operator Enum() const { return (Enum)value; } \ + using BasicEnum::BasicEnum; \ + enum Enum : int + +template +struct BasicFlag { + using Self = TSelf; + using ValueType = int; + + int value; + + BasicFlag() + : value{ 0 } {} + BasicFlag(int value) + : value{ value } {} + + bool IsSet(TSelf mask) const { return (value & mask.value) == mask.value; } + bool IsSetExclusive(TSelf mask) const { return value == mask.value; } + void Set(TSelf mask, bool state) { + if (state) { + value = (int)(value | mask.value); + } else { + value = (int)(value & ~mask.value); + } + } + + /// Comparsion between 2 values of flag. Useful for situations like `a == b` where both a and b are TSelf. + friend bool operator==(const TSelf& a, const TSelf& b) { return a.value == b.value; } + friend auto operator<=>(const TSelf& a, const TSelf& b) { return a.value <=> b.value; } + /// Comparsion between a flag and a raw value. Useful for situations like `a == TSelf::Option` where a is a flag and TSelf::Option is a raw value. + friend bool operator==(const TSelf& self, int value) { return self.value == value; } + friend auto operator<=>(const TSelf& self, int value) { return self.value <=> value; } + + friend TSelf operator&(const TSelf& a, const TSelf& b) { return TSelf(a.value & b.value); } + friend TSelf operator|(const TSelf& a, const TSelf& b) { return TSelf(a.value | b.value); } + friend TSelf operator^(const TSelf& a, const TSelf& b) { return TSelf(a.value ^ b.value); } + + TSelf operator~() const { return TSelf(~value); } + + TSelf& operator&=(int that) { + value = value & that; + return *this; + } + + TSelf& operator|=(int that) { + value = value | that; + return *this; + } + + TSelf& operator^=(int that) { + value = value ^ that; + return *this; + } +}; -- cgit v1.2.3-70-g09d2