Core/Misc: Replaced some macro definitions with inline functions

This commit is contained in:
Spp
2013-01-02 09:07:52 +01:00
parent c85dc26584
commit 2292025bf9
6 changed files with 193 additions and 69 deletions

View File

@@ -51,7 +51,7 @@ void LFGMgr::_LoadFromDB(Field* fields, uint64 guid)
if (!fields)
return;
if (!IS_GROUP(guid))
if (!IS_GROUP_GUID(guid))
return;
SetLeader(guid, MAKE_NEW_GUID(fields[0].GetUInt32(), 0, HIGHGUID_PLAYER));
@@ -77,7 +77,7 @@ void LFGMgr::_LoadFromDB(Field* fields, uint64 guid)
void LFGMgr::_SaveToDB(uint64 guid, uint32 db_guid)
{
if (!IS_GROUP(guid))
if (!IS_GROUP_GUID(guid))
return;
PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_LFG_DATA);
@@ -758,7 +758,7 @@ void LFGMgr::LeaveLfg(uint64 guid)
{
sLog->outDebug(LOG_FILTER_LFG, "LFGMgr::LeaveLfg: [" UI64FMTD "]", guid);
uint64 gguid = IS_GROUP(guid) ? guid : GetGroup(guid);
uint64 gguid = IS_GROUP_GUID(guid) ? guid : GetGroup(guid);
LfgState state = GetState(guid);
switch (state)
{
@@ -1624,7 +1624,7 @@ LfgType LFGMgr::GetDungeonType(uint32 dungeonId)
LfgState LFGMgr::GetState(uint64 guid)
{
LfgState state;
if (IS_GROUP(guid))
if (IS_GROUP_GUID(guid))
state = GroupsStore[guid].GetState();
else
state = PlayersStore[guid].GetState();
@@ -1696,7 +1696,7 @@ uint8 LFGMgr::GetKicksLeft(uint64 guid)
void LFGMgr::RestoreState(uint64 guid, char const *debugMsg)
{
if (IS_GROUP(guid))
if (IS_GROUP_GUID(guid))
{
LfgGroupData& data = GroupsStore[guid];
if (sLog->ShouldLog(LOG_FILTER_LFG, LOG_LEVEL_DEBUG))
@@ -1725,7 +1725,7 @@ void LFGMgr::RestoreState(uint64 guid, char const *debugMsg)
void LFGMgr::SetState(uint64 guid, LfgState state)
{
if (IS_GROUP(guid))
if (IS_GROUP_GUID(guid))
{
LfgGroupData& data = GroupsStore[guid];
if (sLog->ShouldLog(LOG_FILTER_LFG, LOG_LEVEL_DEBUG))
@@ -1932,13 +1932,13 @@ void LFGMgr::SendLfgQueueStatus(uint64 guid, LfgQueueStatusData const& data)
bool LFGMgr::IsLfgGroup(uint64 guid)
{
return guid && IS_GROUP(guid) && GroupsStore[guid].IsLfgGroup();
return guid && IS_GROUP_GUID(guid) && GroupsStore[guid].IsLfgGroup();
}
LFGQueue& LFGMgr::GetQueue(uint64 guid)
{
uint8 queueId = 0;
if (IS_GROUP(guid))
if (IS_GROUP_GUID(guid))
{
const LfgGuidSet& players = GetPlayers(guid);
uint64 pguid = players.empty() ? 0 : (*players.begin());

View File

@@ -358,7 +358,7 @@ LfgCompatibility LFGQueue::CheckCompatibility(LfgGuidList check)
// Store group so we don't need to call Mgr to get it later (if it's player group will be 0 otherwise would have joined as group)
for (LfgRolesMap::const_iterator it2 = itQueue->second.roles.begin(); it2 != itQueue->second.roles.end(); ++it2)
proposalGroups[it2->first] = IS_GROUP(itQueue->first) ? itQueue->first : 0;
proposalGroups[it2->first] = IS_GROUP_GUID(itQueue->first) ? itQueue->first : 0;
numPlayers += itQueue->second.roles.size();
@@ -601,7 +601,7 @@ std::string LFGQueue::DumpQueueInfo() const
for (LfgGuidList::const_iterator it = queue.begin(); it != queue.end(); ++it)
{
uint64 guid = *it;
if (IS_GROUP(guid))
if (IS_GROUP_GUID(guid))
{
groups++;
playersInGroup += sLFGMgr->GetPlayerCount(guid);

View File

@@ -270,7 +270,7 @@ void GameObject::Update(uint32 diff)
} else
AI()->UpdateAI(diff);
if (IS_MO_TRANSPORT(GetGUID()))
if (IS_MO_TRANSPORT_GUID(GetGUID()))
{
//((Transport*)this)->Update(p_time);
return;

View File

@@ -21,64 +21,195 @@
#include "Define.h"
// used for creating values for respawn for example
#define MAKE_PAIR64(l, h) uint64(uint32(l) | (uint64(h) << 32))
#define PAIR64_HIPART(x) (uint32)((uint64(x) >> 32) & UI64LIT(0x00000000FFFFFFFF))
#define PAIR64_LOPART(x) (uint32)(uint64(x) & UI64LIT(0x00000000FFFFFFFF))
#define MAKE_PAIR16(l, h) uint16(uint8(l) | (uint16(h) << 8))
#define MAKE_PAIR32(l, h) uint32(uint16(l) | (uint32(h) << 16))
#define PAIR32_HIPART(x) (uint16)((uint32(x) >> 16) & 0x0000FFFF)
#define PAIR32_LOPART(x) (uint16)(uint32(x) & 0x0000FFFF)
enum HighGuid
{
HIGHGUID_ITEM = 0x4000, // blizz 4000
HIGHGUID_CONTAINER = 0x4000, // blizz 4000
HIGHGUID_PLAYER = 0x0000, // blizz 0000
HIGHGUID_GAMEOBJECT = 0xF110, // blizz F110
HIGHGUID_TRANSPORT = 0xF120, // blizz F120 (for GAMEOBJECT_TYPE_TRANSPORT)
HIGHGUID_UNIT = 0xF130, // blizz F130
HIGHGUID_PET = 0xF140, // blizz F140
HIGHGUID_VEHICLE = 0xF150, // blizz F550
HIGHGUID_DYNAMICOBJECT = 0xF100, // blizz F100
HIGHGUID_CORPSE = 0xF101, // blizz F100
HIGHGUID_MO_TRANSPORT = 0x1FC0, // blizz 1FC0 (for GAMEOBJECT_TYPE_MO_TRANSPORT)
HIGHGUID_GROUP = 0x1F50
HIGHGUID_ITEM = 0x400, // blizz 4000
HIGHGUID_CONTAINER = 0x400, // blizz 4000
HIGHGUID_PLAYER = 0x000, // blizz 0000
HIGHGUID_GAMEOBJECT = 0xF11, // blizz F110
HIGHGUID_TRANSPORT = 0xF12, // blizz F120 (for GAMEOBJECT_TYPE_TRANSPORT)
HIGHGUID_UNIT = 0xF13, // blizz F130
HIGHGUID_PET = 0xF14, // blizz F140
HIGHGUID_VEHICLE = 0xF15, // blizz F550
HIGHGUID_DYNAMICOBJECT = 0xF10, // blizz F100
HIGHGUID_CORPSE = 0xF101, // blizz F100
HIGHGUID_MO_TRANSPORT = 0x1FC, // blizz 1FC0 (for GAMEOBJECT_TYPE_MO_TRANSPORT)
HIGHGUID_GROUP = 0x1F5
};
#define IS_EMPTY_GUID(Guid) (Guid == 0)
// used for creating values for respawn for example
inline uint64 MAKE_PAIR64(uint32 l, uint32 h);
inline uint32 PAIR64_HIPART(uint64 x);
inline uint32 PAIR64_LOPART(uint64 x);
inline uint16 MAKE_PAIR16(uint8 l, uint8 h);
inline uint32 MAKE_PAIR32(uint16 l, uint16 h);
inline uint16 PAIR32_HIPART(uint32 x);
inline uint16 PAIR32_LOPART(uint32 x);
#define IS_CREATURE_GUID(Guid) (GUID_HIPART(Guid) == HIGHGUID_UNIT)
#define IS_PET_GUID(Guid) (GUID_HIPART(Guid) == HIGHGUID_PET)
#define IS_VEHICLE_GUID(Guid) (GUID_HIPART(Guid) == HIGHGUID_VEHICLE)
#define IS_CRE_OR_VEH_GUID(Guid) (IS_CREATURE_GUID(Guid) || IS_VEHICLE_GUID(Guid))
#define IS_CRE_OR_VEH_OR_PET_GUID(Guid)(IS_CRE_OR_VEH_GUID(Guid) || IS_PET_GUID(Guid))
#define IS_PLAYER_GUID(Guid) (GUID_HIPART(Guid) == HIGHGUID_PLAYER && Guid != 0)
#define IS_UNIT_GUID(Guid) (IS_CRE_OR_VEH_OR_PET_GUID(Guid) || IS_PLAYER_GUID(Guid))
// special case for empty guid need check
#define IS_ITEM_GUID(Guid) (GUID_HIPART(Guid) == HIGHGUID_ITEM)
#define IS_GAMEOBJECT_GUID(Guid) (GUID_HIPART(Guid) == HIGHGUID_GAMEOBJECT)
#define IS_DYNAMICOBJECT_GUID(Guid) (GUID_HIPART(Guid) == HIGHGUID_DYNAMICOBJECT)
#define IS_CORPSE_GUID(Guid) (GUID_HIPART(Guid) == HIGHGUID_CORPSE)
#define IS_TRANSPORT(Guid) (GUID_HIPART(Guid) == HIGHGUID_TRANSPORT)
#define IS_MO_TRANSPORT(Guid) (GUID_HIPART(Guid) == HIGHGUID_MO_TRANSPORT)
#define IS_GROUP(Guid) (GUID_HIPART(Guid) == HIGHGUID_GROUP)
inline bool IS_EMPTY_GUID(uint64 guid);
inline bool IS_CREATURE_GUID(uint64 guid);
inline bool IS_PET_GUID(uint64 guid);
inline bool IS_VEHICLE_GUID(uint64 guid);
inline bool IS_CRE_OR_VEH_GUID(uint64 guid);
inline bool IS_CRE_OR_VEH_OR_PET_GUID(uint64 guid);
inline bool IS_PLAYER_GUID(uint64 guid);
inline bool IS_UNIT_GUID(uint64 guid);
inline bool IS_ITEM_GUID(uint64 guid);
inline bool IS_GAMEOBJECT_GUID(uint64 guid);
inline bool IS_DYNAMICOBJECT_GUID(uint64 guid);
inline bool IS_CORPSE_GUID(uint64 guid);
inline bool IS_TRANSPORT_GUID(uint64 guid);
inline bool IS_MO_TRANSPORT_GUID(uint64 guid);
inline bool IS_GROUP_GUID(uint64 guid);
// l - OBJECT_FIELD_GUID
// e - OBJECT_FIELD_ENTRY for GO (except GAMEOBJECT_TYPE_MO_TRANSPORT) and creatures or UNIT_FIELD_PETNUMBER for pets
// h - OBJECT_FIELD_GUID + 1
#define MAKE_NEW_GUID(l, e, h) uint64(uint64(l) | (uint64(e) << 24) | (uint64(h) << 48))
inline uint64 MAKE_NEW_GUID(uint32 l, uint32 e, uint32 h);
#define GUID_HIPART(x) (uint32)((uint64(x) >> 48) & 0x0000FFFF)
//#define GUID_HIPART(x) (uint32)((uint64(x) >> 52)) & 0x0000FFFF)
inline uint32 GUID_HIPART(uint64 guid);
inline uint32 GUID_ENPART(uint64 x);
inline uint32 GUID_LOPART(uint64 x);
// We have different low and middle part size for different guid types
#define _GUID_ENPART_2(x) 0
#define _GUID_ENPART_3(x) (uint32)((uint64(x) >> 24) & UI64LIT(0x0000000000FFFFFF))
#define _GUID_LOPART_2(x) (uint32)(uint64(x) & UI64LIT(0x00000000FFFFFFFF))
#define _GUID_LOPART_3(x) (uint32)(uint64(x) & UI64LIT(0x0000000000FFFFFF))
inline bool IsGuidHaveEnPart(uint64 guid);
inline char const* GetLogNameForGuid(uint64 guid);
inline bool IsGuidHaveEnPart(uint64 guid)
uint64 MAKE_PAIR64(uint32 l, uint32 h)
{
return uint64(l | (uint64(h) << 32));
}
uint32 PAIR64_HIPART(uint64 x)
{
return (uint32)((x >> 32) & UI64LIT(0x00000000FFFFFFFF));
}
uint32 PAIR64_LOPART(uint64 x)
{
return (uint32)(x & UI64LIT(0x00000000FFFFFFFF));
}
uint16 MAKE_PAIR16(uint8 l, uint8 h)
{
return uint16(l | (uint16(h) << 8));
}
uint32 MAKE_PAIR32(uint16 l, uint16 h)
{
return uint32(l | (uint32(h) << 16));
}
uint16 PAIR32_HIPART(uint32 x)
{
return (uint16)((x >> 16) & 0x0000FFFF);
}
uint16 PAIR32_LOPART(uint32 x)
{
return (uint16)(x & 0x0000FFFF);
}
bool IS_EMPTY_GUID(uint64 guid)
{
return guid == 0;
}
bool IS_CREATURE_GUID(uint64 guid)
{
return GUID_HIPART(guid) == HIGHGUID_UNIT;
}
bool IS_PET_GUID(uint64 guid)
{
return GUID_HIPART(guid) == HIGHGUID_PET;
}
bool IS_VEHICLE_GUID(uint64 guid)
{
return GUID_HIPART(guid) == HIGHGUID_VEHICLE;
}
bool IS_CRE_OR_VEH_GUID(uint64 guid)
{
return IS_CREATURE_GUID(guid) || IS_VEHICLE_GUID(guid);
}
bool IS_CRE_OR_VEH_OR_PET_GUID(uint64 guid)
{
return IS_CRE_OR_VEH_GUID(guid) || IS_PET_GUID(guid);
}
bool IS_PLAYER_GUID(uint64 guid)
{
return guid != 0 && GUID_HIPART(guid) == HIGHGUID_PLAYER;
}
bool IS_UNIT_GUID(uint64 guid)
{
return IS_CRE_OR_VEH_OR_PET_GUID(guid) || IS_PLAYER_GUID(guid);
}
bool IS_ITEM_GUID(uint64 guid)
{
return GUID_HIPART(guid) == HIGHGUID_ITEM;
}
bool IS_GAMEOBJECT_GUID(uint64 guid)
{
return GUID_HIPART(guid) == HIGHGUID_GAMEOBJECT;
}
bool IS_DYNAMICOBJECT_GUID(uint64 guid)
{
return GUID_HIPART(guid) == HIGHGUID_DYNAMICOBJECT;
}
bool IS_CORPSE_GUID(uint64 guid)
{
return GUID_HIPART(guid) == HIGHGUID_CORPSE;
}
bool IS_TRANSPORT_GUID(uint64 guid)
{
return GUID_HIPART(guid) == HIGHGUID_TRANSPORT;
}
bool IS_MO_TRANSPORT_GUID(uint64 guid)
{
return GUID_HIPART(guid) == HIGHGUID_MO_TRANSPORT;
}
bool IS_GROUP_GUID(uint64 guid)
{
return GUID_HIPART(guid) == HIGHGUID_GROUP;
}
uint64 MAKE_NEW_GUID(uint32 l, uint32 e, uint32 h)
{
return uint64(uint64(l) | (uint64(e) << 32) | (uint64(h) << (h == HIGHGUID_CORPSE) ? 48 : 52));
}
uint32 GUID_HIPART(uint64 guid)
{
uint32 t = ((uint64(guid) >> 48) & 0x0000FFFF);
return (t == HIGHGUID_CORPSE) ? t : ((t >> 4) & 0x00000FFF);
}
uint32 GUID_ENPART(uint64 x)
{
return IsGuidHaveEnPart(x)
? ((uint32)((x >> 32) & UI64LIT(0x00000000000FFFFF)))
: 0;
}
uint32 GUID_LOPART(uint64 x)
{
// _GUID_LOPART_3 and _GUID_LOPART_2 were both equal to PAIR64_LOPART
return PAIR64_LOPART(x);
}
bool IsGuidHaveEnPart(uint64 guid)
{
switch (GUID_HIPART(guid))
{
@@ -99,10 +230,7 @@ inline bool IsGuidHaveEnPart(uint64 guid)
}
}
#define GUID_ENPART(x) (IsGuidHaveEnPart(x) ? _GUID_ENPART_3(x) : _GUID_ENPART_2(x))
#define GUID_LOPART(x) (IsGuidHaveEnPart(x) ? _GUID_LOPART_3(x) : _GUID_LOPART_2(x))
inline char const* GetLogNameForGuid(uint64 guid)
char const* GetLogNameForGuid(uint64 guid)
{
switch (GUID_HIPART(guid))
{
@@ -121,4 +249,5 @@ inline char const* GetLogNameForGuid(uint64 guid)
return "<unknown>";
}
}
#endif

View File

@@ -771,7 +771,7 @@ public:
}
}
void UpdateAI(uint32 const diff)
void UpdateAI(uint32 const /*diff*/)
{
// When duration of oppened riff visual ends,
// closed one should be cast

View File

@@ -352,11 +352,6 @@ std::string ByteArrayToHexStr(uint8 const* bytes, uint32 length, bool reverse =
#ifndef _FLAG96
#define _FLAG96
#ifndef PAIR64_HIPART
#define PAIR64_HIPART(x) (uint32)((uint64(x) >> 32) & UI64LIT(0x00000000FFFFFFFF))
#define PAIR64_LOPART(x) (uint32)(uint64(x) & UI64LIT(0x00000000FFFFFFFF))
#endif
// simple class for not-modifyable list
template <typename T>
class HookList
@@ -404,8 +399,8 @@ public:
flag96(uint64 p1, uint32 p2)
{
part[0] = PAIR64_LOPART(p1);
part[1] = PAIR64_HIPART(p1);
part[0] = (uint32)(p1 & UI64LIT(0x00000000FFFFFFFF));
part[1] = (uint32)((p1 >> 32) & UI64LIT(0x00000000FFFFFFFF));
part[2] = p2;
}