aboutsummaryrefslogtreecommitdiff
path: root/src/server/shared/Utilities/Util.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/server/shared/Utilities/Util.h')
-rw-r--r--src/server/shared/Utilities/Util.h148
1 files changed, 148 insertions, 0 deletions
diff --git a/src/server/shared/Utilities/Util.h b/src/server/shared/Utilities/Util.h
index 216fe08d64a..57ac731f81a 100644
--- a/src/server/shared/Utilities/Util.h
+++ b/src/server/shared/Utilities/Util.h
@@ -521,6 +521,154 @@ public:
}
};
+class flag128
+{
+private:
+ uint32 part[4];
+
+public:
+ flag128(uint32 p1 = 0, uint32 p2 = 0, uint32 p3 = 0, uint32 p4 = 0)
+ {
+ part[0] = p1;
+ part[1] = p2;
+ part[2] = p3;
+ part[3] = p4;
+ }
+
+ flag128(uint64 p1, uint64 p2)
+ {
+ part[0] = (uint32)(p1 & UI64LIT(0x00000000FFFFFFFF));
+ part[1] = (uint32)((p1 >> 32) & UI64LIT(0x00000000FFFFFFFF));
+ part[0] = (uint32)(p2 & UI64LIT(0x00000000FFFFFFFF));
+ part[1] = (uint32)((p2 >> 32) & UI64LIT(0x00000000FFFFFFFF));
+ }
+
+ inline bool IsEqual(uint32 p1 = 0, uint32 p2 = 0, uint32 p3 = 0, uint32 p4 = 0) const
+ {
+ return (part[0] == p1 && part[1] == p2 && part[2] == p3 && part[3] == p4);
+ }
+
+ inline bool HasFlag(uint32 p1 = 0, uint32 p2 = 0, uint32 p3 = 0, uint32 p4 = 0) const
+ {
+ return (part[0] & p1 || part[1] & p2 || part[2] & p3 && part[3] & p4);
+ }
+
+ inline void Set(uint32 p1 = 0, uint32 p2 = 0, uint32 p3 = 0, uint32 p4 = 0)
+ {
+ part[0] = p1;
+ part[1] = p2;
+ part[2] = p3;
+ part[3] = p4;
+ }
+
+ inline bool operator <(const flag128 &right) const
+ {
+ for (uint8 i = 4; 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 flag128 &right) const
+ {
+ return
+ (
+ part[0] == right.part[0] &&
+ part[1] == right.part[1] &&
+ part[2] == right.part[2] &&
+ part[3] == right.part[3]
+ );
+ }
+
+ inline bool operator !=(const flag128 &right) const
+ {
+ return !this->operator ==(right);
+ }
+
+ inline flag128 & operator =(const flag128 &right)
+ {
+ part[0] = right.part[0];
+ part[1] = right.part[1];
+ part[2] = right.part[2];
+ part[3] = right.part[3];
+ return *this;
+ }
+
+ inline flag128 operator &(const flag128 &right) const
+ {
+ return flag128(part[0] & right.part[0], part[1] & right.part[1],
+ part[2] & right.part[2], part[3] & right.part[3]);
+ }
+
+ inline flag128 & operator &=(const flag128 &right)
+ {
+ part[0] &= right.part[0];
+ part[1] &= right.part[1];
+ part[2] &= right.part[2];
+ part[3] &= right.part[3];
+ return *this;
+ }
+
+ inline flag128 operator |(const flag128 &right) const
+ {
+ return flag128(part[0] | right.part[0], part[1] | right.part[1],
+ part[2] | right.part[2], part[3] | right.part[3]);
+ }
+
+ inline flag128 & operator |=(const flag128 &right)
+ {
+ part[0] |= right.part[0];
+ part[1] |= right.part[1];
+ part[2] |= right.part[2];
+ part[3] |= right.part[3];
+ return *this;
+ }
+
+ inline flag128 operator ~() const
+ {
+ return flag128(~part[0], ~part[1], ~part[2], ~part[3]);
+ }
+
+ inline flag128 operator ^(const flag128 &right) const
+ {
+ return flag128(part[0] ^ right.part[0], part[1] ^ right.part[1],
+ part[2] ^ right.part[2], part[3] ^ right.part[3]);
+ }
+
+ inline flag128 & operator ^=(const flag128 &right)
+ {
+ part[0] ^= right.part[0];
+ part[1] ^= right.part[1];
+ part[2] ^= right.part[2];
+ part[3] ^= right.part[3];
+ return *this;
+ }
+
+ inline operator bool() const
+ {
+ return (part[0] != 0 || part[1] != 0 || part[2] != 0 || part[3] != 0);
+ }
+
+ 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];
+ }
+};
+
enum ComparisionType
{
COMP_TYPE_EQ = 0,