mirror of
https://github.com/TrinityCore/TrinityCore.git
synced 2026-02-20 00:49:46 +01:00
Core/Game: Fix the clang build when building shared libraries
* Hackfix to solve an unresolved issue in clang that the visibility flag is ignored in some explicit template specializations. * See https://llvm.org/bugs/show_bug.cgi?id=24815 * See https://llvm.org/bugs/show_bug.cgi?id=23667
This commit is contained in:
@@ -488,13 +488,7 @@ void AchievementMgr<Guild>::ResetAchievementCriteria(AchievementCriteriaTypes /*
|
|||||||
// Not needed
|
// Not needed
|
||||||
}
|
}
|
||||||
|
|
||||||
template<class T>
|
void DeletePlayerAchievementsFromDB(ObjectGuid guid)
|
||||||
void AchievementMgr<T>::DeleteFromDB(ObjectGuid /*guid*/)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
template<>
|
|
||||||
void AchievementMgr<Player>::DeleteFromDB(ObjectGuid guid)
|
|
||||||
{
|
{
|
||||||
SQLTransaction trans = CharacterDatabase.BeginTransaction();
|
SQLTransaction trans = CharacterDatabase.BeginTransaction();
|
||||||
|
|
||||||
@@ -509,8 +503,7 @@ void AchievementMgr<Player>::DeleteFromDB(ObjectGuid guid)
|
|||||||
CharacterDatabase.CommitTransaction(trans);
|
CharacterDatabase.CommitTransaction(trans);
|
||||||
}
|
}
|
||||||
|
|
||||||
template<>
|
void DeleteGuildAchievementsFromDB(ObjectGuid guid)
|
||||||
void AchievementMgr<Guild>::DeleteFromDB(ObjectGuid guid)
|
|
||||||
{
|
{
|
||||||
SQLTransaction trans = CharacterDatabase.BeginTransaction();
|
SQLTransaction trans = CharacterDatabase.BeginTransaction();
|
||||||
|
|
||||||
@@ -525,16 +518,11 @@ void AchievementMgr<Guild>::DeleteFromDB(ObjectGuid guid)
|
|||||||
CharacterDatabase.CommitTransaction(trans);
|
CharacterDatabase.CommitTransaction(trans);
|
||||||
}
|
}
|
||||||
|
|
||||||
template TRINITY_GAME_API
|
|
||||||
void AchievementMgr<Player>::DeleteFromDB(ObjectGuid /*guid*/);
|
|
||||||
|
|
||||||
template TRINITY_GAME_API
|
|
||||||
void AchievementMgr<Guild>::DeleteFromDB(ObjectGuid /*guid*/);
|
|
||||||
|
|
||||||
template<class T>
|
template<class T>
|
||||||
void AchievementMgr<T>::SaveToDB(SQLTransaction& /*trans*/)
|
void AchievementMgr<T>::SaveToDB(SQLTransaction& /*trans*/)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
template<>
|
template<>
|
||||||
void AchievementMgr<Player>::SaveToDB(SQLTransaction& trans)
|
void AchievementMgr<Player>::SaveToDB(SQLTransaction& trans)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -284,15 +284,41 @@ enum ProgressType
|
|||||||
PROGRESS_HIGHEST
|
PROGRESS_HIGHEST
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// Hackfix to solve an unresolved issue in clang that the visibility
|
||||||
|
// flag is ignored in some explicit template specializations,
|
||||||
|
// which prevents clang from exporting the `DeleteFromDB` symbol.
|
||||||
|
// https://llvm.org/bugs/show_bug.cgi?id=24815
|
||||||
|
// https://llvm.org/bugs/show_bug.cgi?id=23667
|
||||||
|
TC_GAME_API void DeletePlayerAchievementsFromDB(ObjectGuid guid);
|
||||||
|
TC_GAME_API void DeleteGuildAchievementsFromDB(ObjectGuid guid);
|
||||||
|
|
||||||
|
template<typename T>
|
||||||
|
struct AchievementMgrDeleterBase;
|
||||||
|
|
||||||
|
template<>
|
||||||
|
struct AchievementMgrDeleterBase<Player>
|
||||||
|
{
|
||||||
|
static void DeleteFromDB(ObjectGuid lowguid) { DeletePlayerAchievementsFromDB(lowguid); }
|
||||||
|
};
|
||||||
|
|
||||||
|
template<>
|
||||||
|
struct AchievementMgrDeleterBase<Guild>
|
||||||
|
{
|
||||||
|
static void DeleteFromDB(ObjectGuid lowguid) { DeleteGuildAchievementsFromDB(lowguid); }
|
||||||
|
};
|
||||||
|
|
||||||
template<class T>
|
template<class T>
|
||||||
class TC_GAME_API AchievementMgr
|
class TC_GAME_API AchievementMgr
|
||||||
|
: public AchievementMgrDeleterBase<T>
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
AchievementMgr(T* owner);
|
AchievementMgr(T* owner);
|
||||||
~AchievementMgr();
|
~AchievementMgr();
|
||||||
|
|
||||||
void Reset();
|
void Reset();
|
||||||
static void DeleteFromDB(ObjectGuid lowguid);
|
|
||||||
|
using AchievementMgrDeleterBase<T>::DeleteFromDB;
|
||||||
|
|
||||||
void LoadFromDB(PreparedQueryResult achievementResult, PreparedQueryResult criteriaResult);
|
void LoadFromDB(PreparedQueryResult achievementResult, PreparedQueryResult criteriaResult);
|
||||||
void SaveToDB(SQLTransaction& trans);
|
void SaveToDB(SQLTransaction& trans);
|
||||||
void ResetAchievementCriteria(AchievementCriteriaTypes type, uint64 miscValue1 = 0, uint64 miscValue2 = 0, bool evenIfCriteriaComplete = false);
|
void ResetAchievementCriteria(AchievementCriteriaTypes type, uint64 miscValue1 = 0, uint64 miscValue2 = 0, bool evenIfCriteriaComplete = false);
|
||||||
|
|||||||
Reference in New Issue
Block a user