aboutsummaryrefslogtreecommitdiff
path: root/src/server/shared/Utilities/Util.h
diff options
context:
space:
mode:
authorRat <gmstreetrat@gmail.com>2014-11-10 15:18:01 +0100
committerRat <gmstreetrat@gmail.com>2014-11-10 15:18:01 +0100
commitac0ff1fc9b4c409089bbcb0256bdbc2f5cc4a405 (patch)
tree9e939bb2b427ba8ae3e4c5512a6fc9975469c31f /src/server/shared/Utilities/Util.h
parentd268b81044707e15266eadb4ab49f176135d4c26 (diff)
parent43d5fb5eaefeafb34bea10ff5c6a2878c6c14df1 (diff)
Merge branch 'dbc' of https://github.com/Intel/TrinityCore into Intel-dbc
Conflicts: src/server/game/DataStores/DBCStores.cpp src/server/game/DataStores/DBCStructure.h src/server/game/Events/GameEventMgr.cpp
Diffstat (limited to 'src/server/shared/Utilities/Util.h')
-rw-r--r--src/server/shared/Utilities/Util.h140
1 files changed, 138 insertions, 2 deletions
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 <vector>
#include <list>
#include <map>
+#include <stdarg.h>
template<typename T>
struct Optional
@@ -388,7 +389,142 @@ class HookList
}
};
-class flag96
+template<uint8 T_size>
+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<T_size>& 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<T_size>& 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<T_size>& right) const
+ {
+ return !this->operator ==(right);
+ }
+
+ inline flag<T_size>& operator =(const flag<T_size>& right)
+ {
+ for (uint8 i = 0; i < T_size; ++i)
+ part[i] = right.part[i];
+ return *this;
+ }
+
+ inline flag<T_size> operator &(const flag<T_size> &right) const
+ {
+ flag<T_size> fl;
+ for (uint8 i = 0; i < T_size; ++i)
+ fl.part[i] = part[i] & right.part[i];
+ return fl;
+ }
+
+ inline flag<T_size>& operator &=(const flag<T_size> &right)
+ {
+ for (uint8 i = 0; i < T_size; ++i)
+ part[i] &= right.part[i];
+ return *this;
+ }
+
+ inline flag<T_size> operator |(const flag<T_size> &right) const
+ {
+ flag<T_size> fl;
+ for (uint8 i = 0; i < T_size; ++i)
+ fl.part[i] = part[i] | right.part[i];
+ return fl;
+ }
+
+ inline flag<T_size>& operator |=(const flag<T_size> &right)
+ {
+ for (uint8 i = 0; i < T_size; ++i)
+ part[i] |= right.part[i];
+ return *this;
+ }
+
+ inline flag<T_size> operator ~() const
+ {
+ flag<T_size> fl;
+ for (uint8 i = 0; i < T_size; ++i)
+ fl.part[i] = ~part[i];
+ return fl;
+ }
+
+ inline flag<T_size> operator ^(const flag<T_size>& right) const
+ {
+ flag<T_size> fl;
+ for (uint8 i = 0; i < T_size; ++i)
+ fl.part[i] = part[i] ^ right.part[i];
+ return fl;
+ }
+
+ inline flag<T_size>& operator ^=(const flag<T_size>& 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
{