From 412c5416f9406548c5b59569fbbcf47438f72f07 Mon Sep 17 00:00:00 2001 From: Shauren Date: Wed, 7 May 2025 15:41:41 +0200 Subject: Core/Misc: Minor compile time improving changes (cherry picked from commit b5c99939a82ed956cd185cd7a2ede838e2fdf23e) # Conflicts: # src/server/game/Entities/Item/Item.cpp # src/server/game/Entities/Item/Item.h # src/server/game/Entities/Player/Player.cpp # src/server/game/Entities/Player/Player.h --- .../game/Chat/ChatCommands/ChatCommandTags.cpp | 15 ++++++++ .../game/Chat/ChatCommands/ChatCommandTags.h | 14 ++------ .../game/Entities/Conversation/Conversation.cpp | 10 ++++-- .../game/Entities/Conversation/Conversation.h | 3 +- src/server/game/Handlers/MovementHandler.cpp | 16 +++++---- src/server/game/Scripting/ScriptMgr.h | 40 +++++++++++++--------- src/server/game/Scripting/ScriptReloadMgr.cpp | 4 +-- src/server/game/Server/WorldSocket.cpp | 1 - src/server/game/World/World.cpp | 10 ++++-- src/server/scripts/Commands/cs_account.cpp | 1 - .../scripts/Commands/cs_battlenet_account.cpp | 1 - src/server/scripts/Commands/cs_misc.cpp | 1 - 12 files changed, 68 insertions(+), 48 deletions(-) (limited to 'src') diff --git a/src/server/game/Chat/ChatCommands/ChatCommandTags.cpp b/src/server/game/Chat/ChatCommands/ChatCommandTags.cpp index 9caf55b9723..bc64636319c 100644 --- a/src/server/game/Chat/ChatCommands/ChatCommandTags.cpp +++ b/src/server/game/Chat/ChatCommands/ChatCommandTags.cpp @@ -29,6 +29,21 @@ using namespace Trinity::Impl::ChatCommands; +ChatCommandResult Trinity::Impl::ChatCommands::TryConsumExactSequencee(std::string_view sequence, ChatHandler const* handler, std::string_view args) +{ + if (args.empty()) + return std::nullopt; + std::string_view start = args.substr(0, sequence.length()); + if (StringEqualI(start, sequence)) + { + auto [remainingToken, tail] = Trinity::Impl::ChatCommands::tokenize(args.substr(sequence.length())); + if (remainingToken.empty()) // if this is not empty, then we did not consume the full token + return tail; + start = args.substr(0, sequence.length() + remainingToken.length()); + } + return Trinity::Impl::ChatCommands::FormatTrinityString(handler, LANG_CMDPARSER_EXACT_SEQ_MISMATCH, STRING_VIEW_FMT_ARG(sequence), STRING_VIEW_FMT_ARG(start)); +} + ChatCommandResult Trinity::ChatCommands::QuotedString::TryConsume(ChatHandler const* handler, std::string_view args) { if (args.empty()) diff --git a/src/server/game/Chat/ChatCommands/ChatCommandTags.h b/src/server/game/Chat/ChatCommands/ChatCommandTags.h index ed627a50111..c84d85c671f 100644 --- a/src/server/game/Chat/ChatCommands/ChatCommandTags.h +++ b/src/server/game/Chat/ChatCommands/ChatCommandTags.h @@ -65,6 +65,8 @@ namespace Trinity::Impl::ChatCommands // this creates always 25 elements - "abc" -> 'a', 'b', 'c', '\0', '\0', ... up to 25 #define CHATCOMMANDS_IMPL_SPLIT_LITERAL(strliteral) CHATCOMMANDS_IMPL_SPLIT_LITERAL_CONSTRAINED(25, strliteral) + + TC_GAME_API ChatCommandResult TryConsumExactSequencee(std::string_view sequence, ChatHandler const* handler, std::string_view args); } namespace Trinity::ChatCommands @@ -90,17 +92,7 @@ namespace Trinity::ChatCommands ChatCommandResult TryConsume(ChatHandler const* handler, std::string_view args) const { - if (args.empty()) - return std::nullopt; - std::string_view start = args.substr(0, _string.length()); - if (StringEqualI(start, _string)) - { - auto [remainingToken, tail] = Trinity::Impl::ChatCommands::tokenize(args.substr(_string.length())); - if (remainingToken.empty()) // if this is not empty, then we did not consume the full token - return tail; - start = args.substr(0, _string.length() + remainingToken.length()); - } - return Trinity::Impl::ChatCommands::FormatTrinityString(handler, LANG_CMDPARSER_EXACT_SEQ_MISMATCH, STRING_VIEW_FMT_ARG(_string), STRING_VIEW_FMT_ARG(start)); + return Trinity::Impl::ChatCommands::TryConsumExactSequencee(_string, handler, args); } private: diff --git a/src/server/game/Entities/Conversation/Conversation.cpp b/src/server/game/Entities/Conversation/Conversation.cpp index 41abd36fc54..b7b70ec0689 100644 --- a/src/server/game/Entities/Conversation/Conversation.cpp +++ b/src/server/game/Entities/Conversation/Conversation.cpp @@ -200,12 +200,13 @@ void Conversation::Create(ObjectGuid::LowType lowGuid, uint32 conversationEntry, lineField.ActorIndex = line->ActorIdx; lineField.Flags = line->Flags; + std::array& startTimes = _lineStartTimes[line->Id]; for (LocaleConstant locale = LOCALE_enUS; locale < TOTAL_LOCALES; locale = LocaleConstant(locale + 1)) { if (locale == LOCALE_none) continue; - _lineStartTimes[{ locale, line->Id }] = _lastLineEndTimes[locale]; + startTimes[locale] = _lastLineEndTimes[locale]; if (locale == DEFAULT_LOCALE) lineField.StartTime = _lastLineEndTimes[locale].count(); @@ -216,7 +217,7 @@ void Conversation::Create(ObjectGuid::LowType lowGuid, uint32 conversationEntry, } } - _duration = Milliseconds(*std::max_element(_lastLineEndTimes.begin(), _lastLineEndTimes.end())); + _duration = *std::ranges::max_element(_lastLineEndTimes); SetUpdateFieldValue(m_values.ModifyValue(&Conversation::m_conversationData).ModifyValue(&UF::ConversationData::LastLineEndTime), _duration.count()); SetUpdateFieldValue(m_values.ModifyValue(&Conversation::m_conversationData).ModifyValue(&UF::ConversationData::Lines), std::move(lines)); @@ -277,7 +278,10 @@ void Conversation::AddActor(int32 actorId, uint32 actorIdx, ConversationActorTyp Milliseconds const* Conversation::GetLineStartTime(LocaleConstant locale, int32 lineId) const { - return Trinity::Containers::MapGetValuePtr(_lineStartTimes, { locale, lineId }); + if (std::array const* durations = Trinity::Containers::MapGetValuePtr(_lineStartTimes, lineId)) + return &(*durations)[locale]; + + return nullptr; } Milliseconds Conversation::GetLastLineEndTime(LocaleConstant locale) const diff --git a/src/server/game/Entities/Conversation/Conversation.h b/src/server/game/Entities/Conversation/Conversation.h index 4f85809b5ba..96cfd6dda77 100644 --- a/src/server/game/Entities/Conversation/Conversation.h +++ b/src/server/game/Entities/Conversation/Conversation.h @@ -20,7 +20,6 @@ #include "Object.h" #include "GridObject.h" -#include "Hash.h" class ConversationAI; class Unit; @@ -100,7 +99,7 @@ class TC_GAME_API Conversation final : public WorldObject, public GridObject, Milliseconds /*startTime*/> _lineStartTimes; + std::unordered_map /*startTime*/> _lineStartTimes; std::array _lastLineEndTimes; std::unique_ptr _ai; diff --git a/src/server/game/Handlers/MovementHandler.cpp b/src/server/game/Handlers/MovementHandler.cpp index 3ec02d2ad20..6da29b05e0f 100644 --- a/src/server/game/Handlers/MovementHandler.cpp +++ b/src/server/game/Handlers/MovementHandler.cpp @@ -15,8 +15,8 @@ * with this program. If not, see . */ -#include "AuthenticationPackets.h" #include "WorldSession.h" +#include "AuthenticationPackets.h" #include "Battleground.h" #include "Corpse.h" #include "DB2Stores.h" @@ -28,18 +28,20 @@ #include "Map.h" #include "MapManager.h" #include "MiscPackets.h" +#include "MotionMaster.h" +#include "MoveSpline.h" +#include "MovementGenerator.h" #include "MovementPackets.h" #include "Player.h" #include "SpellInfo.h" -#include "MotionMaster.h" -#include "MovementGenerator.h" -#include "MoveSpline.h" +#include "SpellMgr.h" #include "Transport.h" #include "Vehicle.h" -#include "SpellMgr.h" +#include +#include +#include +#include #include -#include -#include #include void WorldSession::HandleMoveWorldportAckOpcode(WorldPackets::Movement::WorldPortResponse& /*packet*/) diff --git a/src/server/game/Scripting/ScriptMgr.h b/src/server/game/Scripting/ScriptMgr.h index e3b7dc63981..39924cc3b57 100644 --- a/src/server/game/Scripting/ScriptMgr.h +++ b/src/server/game/Scripting/ScriptMgr.h @@ -21,7 +21,6 @@ #include "Common.h" #include "ObjectGuid.h" #include "Tuples.h" -#include "Types.h" #include #include #include @@ -1307,37 +1306,46 @@ class TC_GAME_API ScriptMgr namespace Trinity::SpellScripts { template - using is_SpellScript = std::is_base_of; + concept IsSpellScript = std::is_base_of_v; template - using is_AuraScript = std::is_base_of; + concept IsAuraScript = std::is_base_of_v; + + template + concept IsSpellOrAuraScript = IsSpellScript || IsAuraScript; + + template + concept ComplementScriptFor = (IsSpellScript && IsAuraScript) + || (IsAuraScript && IsSpellScript) + || std::same_as; + + template + concept ArgsTuple = Trinity::is_tuple_v; } -template +template Script2, Trinity::SpellScripts::ArgsTuple ArgsType> class GenericSpellAndAuraScriptLoader : public SpellScriptLoader { - using SpellScriptType = typename Trinity::find_type_if_t; - using AuraScriptType = typename Trinity::find_type_if_t; - using ArgsType = typename Trinity::find_type_if_t; - - static_assert(!std::conjunction_v, std::is_same>, "At least one of SpellScript/AuraScript arguments must be provided for GenericSpellAndAuraScriptLoader"); - public: GenericSpellAndAuraScriptLoader(char const* name, ArgsType&& args) : SpellScriptLoader(name), _args(std::move(args)) { } private: SpellScript* GetSpellScript() const override { - if constexpr (!std::is_same_v) - return Trinity::new_from_tuple(_args); + if constexpr (Trinity::SpellScripts::IsSpellScript) + return Trinity::new_from_tuple(_args); + else if constexpr (Trinity::SpellScripts::IsSpellScript) + return Trinity::new_from_tuple(_args); else return nullptr; } AuraScript* GetAuraScript() const override { - if constexpr (!std::is_same_v) - return Trinity::new_from_tuple(_args); + if constexpr (Trinity::SpellScripts::IsAuraScript) + return Trinity::new_from_tuple(_args); + else if constexpr (Trinity::SpellScripts::IsAuraScript) + return Trinity::new_from_tuple(_args); else return nullptr; } @@ -1345,10 +1353,10 @@ private: ArgsType _args; }; -#define RegisterSpellScriptWithArgs(spell_script, script_name, ...) new GenericSpellAndAuraScriptLoader(script_name, std::make_tuple(__VA_ARGS__)) -#define RegisterSpellScript(spell_script) RegisterSpellScriptWithArgs(spell_script, #spell_script) #define RegisterSpellAndAuraScriptPairWithArgs(script_1, script_2, script_name, ...) new GenericSpellAndAuraScriptLoader(script_name, std::make_tuple(__VA_ARGS__)) #define RegisterSpellAndAuraScriptPair(script_1, script_2) RegisterSpellAndAuraScriptPairWithArgs(script_1, script_2, #script_1) +#define RegisterSpellScriptWithArgs(spell_script, script_name, ...) RegisterSpellAndAuraScriptPairWithArgs(spell_script, void, script_name, __VA_ARGS__) +#define RegisterSpellScript(spell_script) RegisterSpellAndAuraScriptPairWithArgs(spell_script, void, #spell_script) template class GenericCreatureScript : public CreatureScript diff --git a/src/server/game/Scripting/ScriptReloadMgr.cpp b/src/server/game/Scripting/ScriptReloadMgr.cpp index 17e9530818c..d61dd8a318a 100644 --- a/src/server/game/Scripting/ScriptReloadMgr.cpp +++ b/src/server/game/Scripting/ScriptReloadMgr.cpp @@ -50,9 +50,9 @@ ScriptReloadMgr* ScriptReloadMgr::instance() #include "Timer.h" #include "Util.h" #include "World.h" -#include #include -#include +#include +#include #include #include #include diff --git a/src/server/game/Server/WorldSocket.cpp b/src/server/game/Server/WorldSocket.cpp index 7f2bd595776..a62b71b66ea 100644 --- a/src/server/game/Server/WorldSocket.cpp +++ b/src/server/game/Server/WorldSocket.cpp @@ -34,7 +34,6 @@ #include "RealmList.pb.h" #include "ScriptMgr.h" #include "SessionKeyGenerator.h" -#include "SslStream.h" #include "World.h" #include "WorldPacket.h" #include "WorldSession.h" diff --git a/src/server/game/World/World.cpp b/src/server/game/World/World.cpp index babecd2bc40..2e881abccc3 100644 --- a/src/server/game/World/World.cpp +++ b/src/server/game/World/World.cpp @@ -106,8 +106,6 @@ #include "WorldSocket.h" #include "WorldStateMgr.h" -#include - TC_GAME_API std::atomic World::m_stopEvent(false); TC_GAME_API uint8 World::m_ExitCode = SHUTDOWN_EXIT_CODE; @@ -263,7 +261,13 @@ void World::SetMotd(std::string motd) sScriptMgr->OnMotdChange(motd); _motd.clear(); - boost::split(_motd, motd, boost::is_any_of("@")); + + std::vector tokens = Trinity::Tokenize(motd, '@', true); + + _motd.reserve(tokens.size()); + + for (std::string_view const& token : tokens) + _motd.emplace_back(token); } std::vector const& World::GetMotd() const diff --git a/src/server/scripts/Commands/cs_account.cpp b/src/server/scripts/Commands/cs_account.cpp index 2fd6e7dd557..ad0fa770a94 100644 --- a/src/server/scripts/Commands/cs_account.cpp +++ b/src/server/scripts/Commands/cs_account.cpp @@ -30,7 +30,6 @@ EndScriptData */ #include "CryptoGenerics.h" #include "CryptoRandom.h" #include "DatabaseEnv.h" -#include "IpAddress.h" #include "IPLocation.h" #include "Language.h" #include "Log.h" diff --git a/src/server/scripts/Commands/cs_battlenet_account.cpp b/src/server/scripts/Commands/cs_battlenet_account.cpp index 6f38ac768ac..254ff517538 100644 --- a/src/server/scripts/Commands/cs_battlenet_account.cpp +++ b/src/server/scripts/Commands/cs_battlenet_account.cpp @@ -21,7 +21,6 @@ #include "ChatCommand.h" #include "CryptoRandom.h" #include "DatabaseEnv.h" -#include "IpAddress.h" #include "IPLocation.h" #include "Language.h" #include "Log.h" diff --git a/src/server/scripts/Commands/cs_misc.cpp b/src/server/scripts/Commands/cs_misc.cpp index e661af2dbeb..d250ff2b2c8 100644 --- a/src/server/scripts/Commands/cs_misc.cpp +++ b/src/server/scripts/Commands/cs_misc.cpp @@ -27,7 +27,6 @@ #include "DisableMgr.h" #include "GridNotifiers.h" #include "Group.h" -#include "IpAddress.h" #include "IPLocation.h" #include "Item.h" #include "ItemBonusMgr.h" -- cgit v1.2.3