mirror of
https://github.com/TrinityCore/TrinityCore.git
synced 2026-01-16 15:40:45 +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
|
||||
}
|
||||
|
||||
template<class T>
|
||||
void AchievementMgr<T>::DeleteFromDB(ObjectGuid /*guid*/)
|
||||
{
|
||||
}
|
||||
|
||||
template<>
|
||||
void AchievementMgr<Player>::DeleteFromDB(ObjectGuid guid)
|
||||
void DeletePlayerAchievementsFromDB(ObjectGuid guid)
|
||||
{
|
||||
SQLTransaction trans = CharacterDatabase.BeginTransaction();
|
||||
|
||||
@@ -509,8 +503,7 @@ void AchievementMgr<Player>::DeleteFromDB(ObjectGuid guid)
|
||||
CharacterDatabase.CommitTransaction(trans);
|
||||
}
|
||||
|
||||
template<>
|
||||
void AchievementMgr<Guild>::DeleteFromDB(ObjectGuid guid)
|
||||
void DeleteGuildAchievementsFromDB(ObjectGuid guid)
|
||||
{
|
||||
SQLTransaction trans = CharacterDatabase.BeginTransaction();
|
||||
|
||||
@@ -525,16 +518,11 @@ void AchievementMgr<Guild>::DeleteFromDB(ObjectGuid guid)
|
||||
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>
|
||||
void AchievementMgr<T>::SaveToDB(SQLTransaction& /*trans*/)
|
||||
{
|
||||
}
|
||||
|
||||
template<>
|
||||
void AchievementMgr<Player>::SaveToDB(SQLTransaction& trans)
|
||||
{
|
||||
|
||||
@@ -284,15 +284,41 @@ enum ProgressType
|
||||
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>
|
||||
class TC_GAME_API AchievementMgr
|
||||
: public AchievementMgrDeleterBase<T>
|
||||
{
|
||||
public:
|
||||
AchievementMgr(T* owner);
|
||||
~AchievementMgr();
|
||||
|
||||
void Reset();
|
||||
static void DeleteFromDB(ObjectGuid lowguid);
|
||||
|
||||
using AchievementMgrDeleterBase<T>::DeleteFromDB;
|
||||
|
||||
void LoadFromDB(PreparedQueryResult achievementResult, PreparedQueryResult criteriaResult);
|
||||
void SaveToDB(SQLTransaction& trans);
|
||||
void ResetAchievementCriteria(AchievementCriteriaTypes type, uint64 miscValue1 = 0, uint64 miscValue2 = 0, bool evenIfCriteriaComplete = false);
|
||||
|
||||
Reference in New Issue
Block a user