aboutsummaryrefslogtreecommitdiff
path: root/src/server/shared/Utilities/Util.h
diff options
context:
space:
mode:
authorShauren <shauren.trinity@gmail.com>2015-04-27 00:33:27 +0200
committerShauren <shauren.trinity@gmail.com>2015-04-27 00:33:27 +0200
commit675a2fcd3b4e46b79c57ead0fc455c4f6e4b03db (patch)
tree1626c74b3e3d84423b4467fc998743e4780f4d60 /src/server/shared/Utilities/Util.h
parent800d5d893964a82265577d3352d683035b589f78 (diff)
Core/Util: Fixed flag128 and removed flag96 - previously if flag128 and flag96 were used in together the result was always a bool instead of expected flag result due to implicit boolean conversion
Diffstat (limited to 'src/server/shared/Utilities/Util.h')
-rw-r--r--src/server/shared/Utilities/Util.h129
1 files changed, 67 insertions, 62 deletions
diff --git a/src/server/shared/Utilities/Util.h b/src/server/shared/Utilities/Util.h
index 0886b625370..9605efe18ec 100644
--- a/src/server/shared/Utilities/Util.h
+++ b/src/server/shared/Utilities/Util.h
@@ -383,32 +383,41 @@ class HookList
}
};
-template<uint8 T_size>
-class flag
+class flag128
{
-protected:
- uint32 part[T_size];
+private:
+ uint32 part[4];
public:
- flag()
+ 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;
+ }
+
+ inline bool IsEqual(uint32 p1 = 0, uint32 p2 = 0, uint32 p3 = 0, uint32 p4 = 0) const
{
- memset(part, 0, sizeof(uint32)*T_size);
+ return (part[0] == p1 && part[1] == p2 && part[2] == p3 && part[3] == p4);
}
- flag(uint32 first, ...)
+ inline bool HasFlag(uint32 p1 = 0, uint32 p2 = 0, uint32 p3 = 0, uint32 p4 = 0) const
{
- va_list ap;
- part[0] = first;
+ return (part[0] & p1 || part[1] & p2 || part[2] & p3 || part[3] & p4);
+ }
- va_start(ap, first);
- for (int i = 1; i < T_size; ++i)
- part[i] = va_arg(ap, uint32);
- va_end(ap);
+ 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 flag<T_size>& right) const
+ inline bool operator <(const flag128 &right) const
{
- for (uint8 i = T_size; i > 0; --i)
+ for (uint8 i = 4; i > 0; --i)
{
if (part[i - 1] < right.part[i - 1])
return true;
@@ -418,85 +427,84 @@ public:
return false;
}
- inline bool operator ==(const flag<T_size>& right) const
+ inline bool operator ==(const flag128 &right) const
{
- for (uint8 i = 0; i < T_size; ++i)
- if (part[i] != right.part[i])
- return false;
- return true;
+ 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 flag<T_size>& right) const
+ inline bool operator !=(const flag128 &right) const
{
return !this->operator ==(right);
}
- inline flag<T_size>& operator =(const flag<T_size>& right)
+ inline flag128 & operator =(const flag128 &right)
{
- for (uint8 i = 0; i < T_size; ++i)
- part[i] = right.part[i];
+ part[0] = right.part[0];
+ part[1] = right.part[1];
+ part[2] = right.part[2];
+ part[3] = right.part[3];
return *this;
}
- inline flag<T_size> operator &(const flag<T_size> &right) const
+ inline flag128 operator &(const flag128 &right) const
{
- flag<T_size> fl;
- for (uint8 i = 0; i < T_size; ++i)
- fl.part[i] = part[i] & right.part[i];
- return fl;
+ return flag128(part[0] & right.part[0], part[1] & right.part[1],
+ part[2] & right.part[2], part[3] & right.part[3]);
}
- inline flag<T_size>& operator &=(const flag<T_size> &right)
+ inline flag128 & operator &=(const flag128 &right)
{
- for (uint8 i = 0; i < T_size; ++i)
- part[i] &= right.part[i];
+ part[0] &= right.part[0];
+ part[1] &= right.part[1];
+ part[2] &= right.part[2];
+ part[3] &= right.part[3];
return *this;
}
- inline flag<T_size> operator |(const flag<T_size> &right) const
+ inline flag128 operator |(const flag128 &right) const
{
- flag<T_size> fl;
- for (uint8 i = 0; i < T_size; ++i)
- fl.part[i] = part[i] | right.part[i];
- return fl;
+ return flag128(part[0] | right.part[0], part[1] | right.part[1],
+ part[2] | right.part[2], part[3] | right.part[3]);
}
- inline flag<T_size>& operator |=(const flag<T_size> &right)
+ inline flag128 & operator |=(const flag128 &right)
{
- for (uint8 i = 0; i < T_size; ++i)
- part[i] |= right.part[i];
+ part[0] |= right.part[0];
+ part[1] |= right.part[1];
+ part[2] |= right.part[2];
+ part[3] |= right.part[3];
return *this;
}
- inline flag<T_size> operator ~() const
+ inline flag128 operator ~() const
{
- flag<T_size> fl;
- for (uint8 i = 0; i < T_size; ++i)
- fl.part[i] = ~part[i];
- return fl;
+ return flag128(~part[0], ~part[1], ~part[2], ~part[3]);
}
- inline flag<T_size> operator ^(const flag<T_size>& right) const
+ inline flag128 operator ^(const flag128 &right) const
{
- flag<T_size> fl;
- for (uint8 i = 0; i < T_size; ++i)
- fl.part[i] = part[i] ^ right.part[i];
- return fl;
+ return flag128(part[0] ^ right.part[0], part[1] ^ right.part[1],
+ part[2] ^ right.part[2], part[3] ^ right.part[3]);
}
- inline flag<T_size>& operator ^=(const flag<T_size>& right)
+ inline flag128 & operator ^=(const flag128 &right)
{
- for (uint8 i = 0; i < T_size; ++i)
- part[i] ^= right.part[i];
+ 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
{
- for (uint8 i = 0; i < T_size; ++i)
- if (part[i] != 0)
- return true;
- return false;
+ return (part[0] != 0 || part[1] != 0 || part[2] != 0 || part[3] != 0);
}
inline bool operator !() const
@@ -504,20 +512,17 @@ public:
return !this->operator bool();
}
- inline uint32& operator [](uint8 el)
+ inline uint32 & operator [](uint8 el)
{
return part[el];
}
- inline const uint32& operator [](uint8 el) const
+ inline const uint32 & operator [](uint8 el) const
{
return part[el];
}
};
-typedef flag<3> flag96;
-typedef flag<4> flag128;
-
enum ComparisionType
{
COMP_TYPE_EQ = 0,