From f847f55385cd1babc67d701d49f180242c63e83e Mon Sep 17 00:00:00 2001 From: Intel Date: Sun, 9 Nov 2014 23:53:48 +0200 Subject: Core/DataStores: Updating spells dbc part 1 --- src/server/shared/Utilities/Util.h | 140 ++++++++++++++++++++++++++++++++++++- 1 file changed, 138 insertions(+), 2 deletions(-) (limited to 'src/server/shared/Utilities/Util.h') diff --git a/src/server/shared/Utilities/Util.h b/src/server/shared/Utilities/Util.h index 216fe08d64a..90d19f7f7eb 100644 --- a/src/server/shared/Utilities/Util.h +++ b/src/server/shared/Utilities/Util.h @@ -27,6 +27,7 @@ #include #include #include +#include template struct Optional @@ -388,7 +389,142 @@ class HookList } }; -class flag96 +template +class flag +{ +protected: + uint32 part[T_size]; + +public: + flag() + { + memset(part, 0, sizeof(uint32)*T_size); + } + + flag(uint32 first, ...) + { + va_list ap; + part[0] = first; + + va_start(ap, first); + for (int i = 1; i < T_size; ++i) + part[i] = va_arg(ap, uint32); + va_end(ap); + } + + inline bool operator <(const flag& right) const + { + for (uint8 i = T_size; i > 0; --i) + { + if (part[i - 1] < right.part[i - 1]) + return true; + else if (part[i - 1] > right.part[i - 1]) + return false; + } + return false; + } + + inline bool operator ==(const flag& right) const + { + for (uint8 i = 0; i < T_size; ++i) + if (part[i] != right.part[i]) + return false; + return true; + } + + inline bool operator !=(const flag& right) const + { + return !this->operator ==(right); + } + + inline flag& operator =(const flag& right) + { + for (uint8 i = 0; i < T_size; ++i) + part[i] = right.part[i]; + return *this; + } + + inline flag operator &(const flag &right) const + { + flag fl; + for (uint8 i = 0; i < T_size; ++i) + fl.part[i] = part[i] & right.part[i]; + return fl; + } + + inline flag& operator &=(const flag &right) + { + for (uint8 i = 0; i < T_size; ++i) + part[i] &= right.part[i]; + return *this; + } + + inline flag operator |(const flag &right) const + { + flag fl; + for (uint8 i = 0; i < T_size; ++i) + fl.part[i] = part[i] | right.part[i]; + return fl; + } + + inline flag& operator |=(const flag &right) + { + for (uint8 i = 0; i < T_size; ++i) + part[i] |= right.part[i]; + return *this; + } + + inline flag operator ~() const + { + flag fl; + for (uint8 i = 0; i < T_size; ++i) + fl.part[i] = ~part[i]; + return fl; + } + + inline flag operator ^(const flag& right) const + { + flag fl; + for (uint8 i = 0; i < T_size; ++i) + fl.part[i] = part[i] ^ right.part[i]; + return fl; + } + + inline flag& operator ^=(const flag& right) + { + for (uint8 i = 0; i < T_size; ++i) + part[i] ^= right.part[i]; + return *this; + } + + inline operator bool() const + { + for (uint8 i = 0; i < T_size; ++i) + if (part[i] != 0) + return true; + return false; + } + + inline bool operator !() const + { + return !this->operator bool(); + } + + inline uint32& operator [](uint8 el) + { + return part[el]; + } + + inline const uint32& operator [](uint8 el) const + { + return part[el]; + } +}; + +typedef flag<3> flag96; +typedef flag<4> flag128; + +/*class flag96 { private: uint32 part[3]; @@ -519,7 +655,7 @@ public: { return part[el]; } -}; +};*/ enum ComparisionType { -- cgit v1.2.3