1
0
forked from 0ad/0ad

workaround for invalidId issue (fixes windows build)

class static const member apparently sometimes requires external linkage
and enum causes conversion warnings, so go with file-scope constants.

This was SVN commit r6161.
This commit is contained in:
janwas 2008-06-30 17:31:09 +00:00
parent 129dfdcec0
commit 58407c7438
6 changed files with 17 additions and 13 deletions

View File

@ -13,15 +13,11 @@
#include "ps/Player.h"
#include "simulation/Entity.h"
// Initialized in class declaration, but still needs a translation unit to
// define the storage location for it... for cases where the compiler can't (or
// doesn't) inline the constant value directly.
const size_t CUnit::invalidId;
CUnit::CUnit(CObjectEntry* object, CEntity* entity, CObjectManager& objectManager,
const std::set<CStr>& actorSelections)
: m_Object(object), m_Model(object->m_Model->Clone()), m_Entity(entity),
m_ID(invalidId), m_ActorSelections(actorSelections), m_PlayerID(CPlayer::invalidId),
m_ID(invalidUnitId), m_ActorSelections(actorSelections), m_PlayerID(invalidPlayerId),
m_ObjectManager(objectManager)
{
m_Animation = new CUnitAnimation(*this);
@ -210,7 +206,7 @@ void CUnit::ReloadObject()
// Copy the old instance-specific settings from the old model to the new instance
newModel->SetTransform(m_Model->GetTransform());
if (m_PlayerID != CPlayer::invalidId)
if (m_PlayerID != invalidPlayerId)
newModel->SetPlayerID(m_PlayerID);
newModel->CopyAnimationFrom(m_Model);

View File

@ -12,6 +12,14 @@ class CEntity;
class CSkeletonAnim;
class CUnitAnimation;
// note: we can't declare as static const size_t invalidId = size_t(~0) in
// the class because it seems to be a grey area in the C++ standard whether
// or not the constant is propagated or needs an external definition.
// an enum causes conversion warnings in MSC, so we go with a file-scope
// constant.
const size_t invalidUnitId = ~size_t(0);
/////////////////////////////////////////////////////////////////////////////////////////////
// CUnit: simple "actor" definition - defines a sole object within the world
class CUnit : boost::noncopyable
@ -74,7 +82,6 @@ public:
// Most units have a hopefully-unique ID number, so they can be referred to
// persistently despite saving/loading maps. Default for new units is -1; should
// usually be set to CUnitManager::GetNewID() after creation.
static const size_t invalidId = ~(size_t)0;
size_t GetID() const { return m_ID; }
void SetID(size_t id) { m_ID = id; }

View File

@ -138,7 +138,7 @@ CUnit* CUnitManager::CreateUnit(const CStr& actorName, CEntity* entity, const st
// FindByID
CUnit* CUnitManager::FindByID(size_t id) const
{
if (id == CUnit::invalidId)
if (id == invalidUnitId)
return NULL;
for (size_t i = 0; i < m_Units.size(); ++i)

View File

@ -21,6 +21,8 @@ enum EDiplomaticStance
DIPLOMACY_ALLIED
};
const size_t invalidPlayerId = ~size_t(0); // rationale: see Unit.h
class CPlayer : public CSynchedJSObject<CPlayer>
{
public:
@ -46,7 +48,6 @@ public:
bool ValidateCommand(CNetMessage *pMsg);
static const size_t invalidId = ~(size_t)0;
inline size_t GetPlayerID() const
{ return m_PlayerID; }
inline void SetPlayerID(size_t id)

View File

@ -152,7 +152,7 @@ CEntity::~CEntity()
void CEntity::LoadBase()
{
size_t previous_unit_id = CUnit::invalidId;
size_t previous_unit_id = invalidUnitId;
if( m_actor )
{

View File

@ -241,7 +241,7 @@ END_COMMAND(SetObjectSettings);
//////////////////////////////////////////////////////////////////////////
static size_t g_PreviewUnitID = CUnit::invalidId;
static size_t g_PreviewUnitID = invalidUnitId;
static CStrW g_PreviewUnitName;
static bool g_PreviewUnitFloating;
@ -306,7 +306,7 @@ MESSAGEHANDLER(ObjectPreview)
previewUnit = NULL;
}
g_PreviewUnitID = CUnit::invalidId;
g_PreviewUnitID = invalidUnitId;
bool isEntity;
CStrW name;
@ -519,7 +519,7 @@ QUERYHANDLER(PickObject)
if (target)
msg->id = target->GetID();
else
msg->id = CUnit::invalidId;
msg->id = invalidUnitId;
if (target)
{