Skip to content

Commit

Permalink
[12365] fix Singleton compile error on clang
Browse files Browse the repository at this point in the history
some members of Singleton were implicitly specialized in the static function
definitions, which conflicted with the initialization of said members (clang
saw it as a redefinition of the specialization)

Signed-off-by: DasBlub <DasBlub@gmail.com>
  • Loading branch information
vermie authored and DasBlub committed Feb 21, 2013
1 parent 0055d05 commit 772a5bb
Show file tree
Hide file tree
Showing 39 changed files with 87 additions and 128 deletions.
2 changes: 1 addition & 1 deletion src/framework/Dynamic/FactoryHolder.h
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@
#include "Platform/Define.h"
#include "Utilities/TypeList.h"
#include "ObjectRegistry.h"
#include "Policies/SingletonImp.h"
#include "Policies/Singleton.h"

/** FactoryHolder holds a factory object of a specific type
*/
Expand Down
50 changes: 50 additions & 0 deletions src/framework/Policies/Singleton.h
Original file line number Diff line number Diff line change
Expand Up @@ -62,6 +62,56 @@ namespace MaNGOS
static T* si_instance;
static bool si_destroyed;
};

template<typename T, class ThreadingModel, class CreatePolicy, class LifeTimePolicy>
T* Singleton<T, ThreadingModel, CreatePolicy, LifeTimePolicy>::si_instance = NULL;

template<typename T, class ThreadingModel, class CreatePolicy, class LifeTimePolicy>
bool Singleton<T, ThreadingModel, CreatePolicy, LifeTimePolicy>::si_destroyed = false;

template<typename T, class ThreadingModel, class CreatePolicy, class LifeTimePolicy>
T& MaNGOS::Singleton<T, ThreadingModel, CreatePolicy, LifeTimePolicy>::Instance()
{
if (!si_instance)
{
// double-checked Locking pattern
Guard();

if (!si_instance)
{
if (si_destroyed)
{
si_destroyed = false;
LifeTimePolicy::OnDeadReference();
}

si_instance = CreatePolicy::Create();
LifeTimePolicy::ScheduleCall(&DestroySingleton);
}
}

return *si_instance;
}

template<typename T, class ThreadingModel, class CreatePolicy, class LifeTimePolicy>
void MaNGOS::Singleton<T, ThreadingModel, CreatePolicy, LifeTimePolicy>::DestroySingleton()
{
CreatePolicy::Destroy(si_instance);
si_instance = NULL;
si_destroyed = true;
}
}

#define INSTANTIATE_SINGLETON_1(TYPE) \
template class MANGOS_DLL_DECL MaNGOS::Singleton<TYPE, MaNGOS::SingleThreaded<TYPE>, MaNGOS::OperatorNew<TYPE>, MaNGOS::ObjectLifeTime<TYPE> >;

#define INSTANTIATE_SINGLETON_2(TYPE, THREADINGMODEL) \
template class MANGOS_DLL_DECL MaNGOS::Singleton<TYPE, THREADINGMODEL, MaNGOS::OperatorNew<TYPE>, MaNGOS::ObjectLifeTime<TYPE> >;

#define INSTANTIATE_SINGLETON_3(TYPE, THREADINGMODEL, CREATIONPOLICY ) \
template class MANGOS_DLL_DECL MaNGOS::Singleton<TYPE, THREADINGMODEL, CREATIONPOLICY, MaNGOS::ObjectLifeTime<TYPE> >;

#define INSTANTIATE_SINGLETON_4(TYPE, THREADINGMODEL, CREATIONPOLICY, OBJECTLIFETIME) \
template class MANGOS_DLL_DECL MaNGOS::Singleton<TYPE, THREADINGMODEL, CREATIONPOLICY, OBJECTLIFETIME >;

#endif
91 changes: 0 additions & 91 deletions src/framework/Policies/SingletonImp.h

This file was deleted.

2 changes: 1 addition & 1 deletion src/game/AccountMgr.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@
#include "ObjectAccessor.h"
#include "ObjectGuid.h"
#include "Player.h"
#include "Policies/SingletonImp.h"
#include "Policies/Singleton.h"
#include "Util.h"
#include "Auth/Sha1.h"

Expand Down
2 changes: 1 addition & 1 deletion src/game/AchievementMgr.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@
#include "InstanceData.h"
#include "DBCStructure.h"

#include "Policies/SingletonImp.h"
#include "Policies/Singleton.h"

INSTANTIATE_SINGLETON_1(AchievementGlobalMgr);

Expand Down
2 changes: 1 addition & 1 deletion src/game/AuctionHouseBot/AuctionHouseBot.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
// for that day.
#define AUCTIONHOUSEBOT_CONF_VERSION 2010102201

#include "Policies/SingletonImp.h"
#include "Policies/Singleton.h"

struct BuyerAuctionEval
{
Expand Down
2 changes: 1 addition & 1 deletion src/game/AuctionHouseMgr.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@
#include "WorldSession.h"
#include "Mail.h"

#include "Policies/SingletonImp.h"
#include "Policies/Singleton.h"

INSTANTIATE_SINGLETON_1(AuctionHouseMgr);

Expand Down
2 changes: 1 addition & 1 deletion src/game/BattleGround/BattleGroundMgr.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@
#include "WorldPacket.h"
#include "GameEventMgr.h"

#include "Policies/SingletonImp.h"
#include "Policies/Singleton.h"

INSTANTIATE_SINGLETON_1(BattleGroundMgr);

Expand Down
2 changes: 1 addition & 1 deletion src/game/Calendar.h
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@
#ifndef MANGOS_CALENDAR_H
#define MANGOS_CALENDAR_H

#include "Policies/SingletonImp.h"
#include "Policies/Singleton.h"
#include "Common.h"
#include "ObjectGuid.h"
#include "SharedDefines.h"
Expand Down
2 changes: 1 addition & 1 deletion src/game/ChannelMgr.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@
*/

#include "ChannelMgr.h"
#include "Policies/SingletonImp.h"
#include "Policies/Singleton.h"
#include "World.h"

INSTANTIATE_SINGLETON_1(AllianceChannelMgr);
Expand Down
2 changes: 1 addition & 1 deletion src/game/Creature.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,7 @@
#include "CreatureLinkingMgr.h"

// apply implementation of the singletons
#include "Policies/SingletonImp.h"
#include "Policies/Singleton.h"

ObjectGuid CreatureData::GetObjectGuid(uint32 lowguid) const
{
Expand Down
2 changes: 1 addition & 1 deletion src/game/CreatureAISelector.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@
#include "Creature.h"
#include "CreatureAIImpl.h"
#include "NullCreatureAI.h"
#include "Policies/SingletonImp.h"
#include "Policies/Singleton.h"
#include "MovementGenerator.h"
#include "ScriptMgr.h"
#include "Pet.h"
Expand Down
2 changes: 1 addition & 1 deletion src/game/CreatureEventAIMgr.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@
#include "CreatureEventAIMgr.h"
#include "ObjectMgr.h"
#include "ProgressBar.h"
#include "Policies/SingletonImp.h"
#include "Policies/Singleton.h"
#include "ObjectGuid.h"
#include "GridDefines.h"
#include "SpellMgr.h"
Expand Down
2 changes: 1 addition & 1 deletion src/game/CreatureLinkingMgr.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@
*/

#include "CreatureLinkingMgr.h"
#include "Policies/SingletonImp.h"
#include "Policies/Singleton.h"
#include "ProgressBar.h"
#include "Database/DatabaseEnv.h"
#include "ObjectMgr.h"
Expand Down
2 changes: 1 addition & 1 deletion src/game/DBCStores.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@
*/

#include "DBCStores.h"
#include "Policies/SingletonImp.h"
#include "Policies/Singleton.h"
#include "Log.h"
#include "ProgressBar.h"
#include "SharedDefines.h"
Expand Down
2 changes: 1 addition & 1 deletion src/game/GMTicketMgr.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@
#include "ObjectMgr.h"
#include "ObjectGuid.h"
#include "ProgressBar.h"
#include "Policies/SingletonImp.h"
#include "Policies/Singleton.h"
#include "Player.h"

INSTANTIATE_SINGLETON_1(GMTicketMgr);
Expand Down
2 changes: 1 addition & 1 deletion src/game/GameEventMgr.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@
#include "BattleGround/BattleGroundMgr.h"
#include "MassMailMgr.h"
#include "SpellMgr.h"
#include "Policies/SingletonImp.h"
#include "Policies/Singleton.h"

INSTANTIATE_SINGLETON_1(GameEventMgr);

Expand Down
2 changes: 1 addition & 1 deletion src/game/GridMap.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@
#include "VMapFactory.h"
#include "MoveMap.h"
#include "World.h"
#include "Policies/SingletonImp.h"
#include "Policies/Singleton.h"
#include "Util.h"

char const* MAP_MAGIC = "MAPS";
Expand Down
2 changes: 1 addition & 1 deletion src/game/GuildMgr.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@
#include "Log.h"
#include "ObjectGuid.h"
#include "Database/DatabaseEnv.h"
#include "Policies/SingletonImp.h"
#include "Policies/Singleton.h"
#include "ProgressBar.h"
#include "World.h"

Expand Down
2 changes: 1 addition & 1 deletion src/game/MapManager.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@

#include "MapManager.h"
#include "MapPersistentStateMgr.h"
#include "Policies/SingletonImp.h"
#include "Policies/Singleton.h"
#include "Database/DatabaseEnv.h"
#include "Log.h"
#include "Transports.h"
Expand Down
2 changes: 1 addition & 1 deletion src/game/MassMailMgr.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@
*/

#include "MassMailMgr.h"
#include "Policies/SingletonImp.h"
#include "Policies/Singleton.h"
#include "Database/DatabaseEnv.h"
#include "Database/DatabaseImpl.h"
#include "SharedDefines.h"
Expand Down
2 changes: 1 addition & 1 deletion src/game/ObjectAccessor.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@

#include "ObjectAccessor.h"
#include "ObjectMgr.h"
#include "Policies/SingletonImp.h"
#include "Policies/Singleton.h"
#include "Player.h"
#include "WorldPacket.h"
#include "Item.h"
Expand Down
2 changes: 1 addition & 1 deletion src/game/ObjectMgr.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@

#include "ObjectMgr.h"
#include "Database/DatabaseEnv.h"
#include "Policies/SingletonImp.h"
#include "Policies/Singleton.h"

#include "SQLStorages.h"
#include "Log.h"
Expand Down
2 changes: 1 addition & 1 deletion src/game/OutdoorPvP/OutdoorPvPMgr.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@
*/

#include "OutdoorPvPMgr.h"
#include "Policies/SingletonImp.h"
#include "Policies/Singleton.h"
#include "OutdoorPvP.h"
#include "World.h"
#include "Log.h"
Expand Down
2 changes: 1 addition & 1 deletion src/game/PoolManager.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@
#include "MapPersistentStateMgr.h"
#include "MapManager.h"
#include "World.h"
#include "Policies/SingletonImp.h"
#include "Policies/Singleton.h"

INSTANTIATE_SINGLETON_1(PoolManager);

Expand Down
2 changes: 1 addition & 1 deletion src/game/ScriptMgr.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@
*/

#include "ScriptMgr.h"
#include "Policies/SingletonImp.h"
#include "Policies/Singleton.h"
#include "Log.h"
#include "ProgressBar.h"
#include "ObjectMgr.h"
Expand Down
2 changes: 1 addition & 1 deletion src/game/SkillDiscovery.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@
#include "Database/DatabaseEnv.h"
#include "Log.h"
#include "ProgressBar.h"
#include "Policies/SingletonImp.h"
#include "Policies/Singleton.h"
#include "World.h"
#include "Util.h"
#include "SkillDiscovery.h"
Expand Down
2 changes: 1 addition & 1 deletion src/game/SocialMgr.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@
*/

#include "SocialMgr.h"
#include "Policies/SingletonImp.h"
#include "Policies/Singleton.h"
#include "Database/DatabaseEnv.h"
#include "Opcodes.h"
#include "WorldPacket.h"
Expand Down
2 changes: 1 addition & 1 deletion src/game/Spell.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@
#include "MapManager.h"
#include "ObjectAccessor.h"
#include "CellImpl.h"
#include "Policies/SingletonImp.h"
#include "Policies/Singleton.h"
#include "SharedDefines.h"
#include "LootMgr.h"
#include "VMapFactory.h"
Expand Down

0 comments on commit 772a5bb

Please sign in to comment.