diff options
author | Shauren <shauren.trinity@gmail.com> | 2025-05-07 15:41:41 +0200 |
---|---|---|
committer | Ovahlord <dreadkiller@gmx.de> | 2025-05-11 11:46:06 +0200 |
commit | 412c5416f9406548c5b59569fbbcf47438f72f07 (patch) | |
tree | e36a9e9b50f689fa0627f9bc390d86bcb6445cd1 | |
parent | 18436298f43372edef32587ed1bf6e6f625c200c (diff) |
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
-rw-r--r-- | src/server/game/Chat/ChatCommands/ChatCommandTags.cpp | 15 | ||||
-rw-r--r-- | src/server/game/Chat/ChatCommands/ChatCommandTags.h | 14 | ||||
-rw-r--r-- | src/server/game/Entities/Conversation/Conversation.cpp | 10 | ||||
-rw-r--r-- | src/server/game/Entities/Conversation/Conversation.h | 3 | ||||
-rw-r--r-- | src/server/game/Handlers/MovementHandler.cpp | 16 | ||||
-rw-r--r-- | src/server/game/Scripting/ScriptMgr.h | 40 | ||||
-rw-r--r-- | src/server/game/Scripting/ScriptReloadMgr.cpp | 4 | ||||
-rw-r--r-- | src/server/game/Server/WorldSocket.cpp | 1 | ||||
-rw-r--r-- | src/server/game/World/World.cpp | 10 | ||||
-rw-r--r-- | src/server/scripts/Commands/cs_account.cpp | 1 | ||||
-rw-r--r-- | src/server/scripts/Commands/cs_battlenet_account.cpp | 1 | ||||
-rw-r--r-- | src/server/scripts/Commands/cs_misc.cpp | 1 |
12 files changed, 68 insertions, 48 deletions
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<Milliseconds, TOTAL_LOCALES>& 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<Milliseconds, TOTAL_LOCALES> 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<Con Milliseconds _duration; uint32 _textureKitId; - std::unordered_map<std::pair<LocaleConstant /*locale*/, int32 /*lineId*/>, Milliseconds /*startTime*/> _lineStartTimes; + std::unordered_map<int32 /*lineId*/, std::array<Milliseconds, TOTAL_LOCALES> /*startTime*/> _lineStartTimes; std::array<Milliseconds /*endTime*/, TOTAL_LOCALES> _lastLineEndTimes; std::unique_ptr<ConversationAI> _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 <http://www.gnu.org/licenses/>. */ -#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 <boost/accumulators/framework/accumulator_set.hpp> +#include <boost/accumulators/framework/features.hpp> +#include <boost/accumulators/statistics/mean.hpp> +#include <boost/accumulators/statistics/median.hpp> #include <boost/accumulators/statistics/variance.hpp> -#include <boost/accumulators/accumulators.hpp> -#include <boost/accumulators/statistics.hpp> #include <boost/circular_buffer.hpp> 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 <boost/preprocessor/punctuation/remove_parens.hpp> #include <memory> #include <vector> @@ -1307,37 +1306,46 @@ class TC_GAME_API ScriptMgr namespace Trinity::SpellScripts { template<typename T> - using is_SpellScript = std::is_base_of<SpellScript, T>; + concept IsSpellScript = std::is_base_of_v<SpellScript, T>; template<typename T> - using is_AuraScript = std::is_base_of<AuraScript, T>; + concept IsAuraScript = std::is_base_of_v<AuraScript, T>; + + template<typename T> + concept IsSpellOrAuraScript = IsSpellScript<T> || IsAuraScript<T>; + + template<typename T, typename Other> + concept ComplementScriptFor = (IsSpellScript<T> && IsAuraScript<Other>) + || (IsAuraScript<T> && IsSpellScript<Other>) + || std::same_as<T, void>; + + template<typename T> + concept ArgsTuple = Trinity::is_tuple_v<T>; } -template <typename... Ts> +template <Trinity::SpellScripts::IsSpellOrAuraScript Script1, Trinity::SpellScripts::ComplementScriptFor<Script1> Script2, Trinity::SpellScripts::ArgsTuple ArgsType> class GenericSpellAndAuraScriptLoader : public SpellScriptLoader { - using SpellScriptType = typename Trinity::find_type_if_t<Trinity::SpellScripts::is_SpellScript, Ts...>; - using AuraScriptType = typename Trinity::find_type_if_t<Trinity::SpellScripts::is_AuraScript, Ts...>; - using ArgsType = typename Trinity::find_type_if_t<Trinity::is_tuple, Ts...>; - - static_assert(!std::conjunction_v<std::is_same<SpellScriptType, Trinity::find_type_end>, std::is_same<AuraScriptType, Trinity::find_type_end>>, "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<SpellScriptType, Trinity::find_type_end>) - return Trinity::new_from_tuple<SpellScriptType>(_args); + if constexpr (Trinity::SpellScripts::IsSpellScript<Script1>) + return Trinity::new_from_tuple<Script1>(_args); + else if constexpr (Trinity::SpellScripts::IsSpellScript<Script2>) + return Trinity::new_from_tuple<Script2>(_args); else return nullptr; } AuraScript* GetAuraScript() const override { - if constexpr (!std::is_same_v<AuraScriptType, Trinity::find_type_end>) - return Trinity::new_from_tuple<AuraScriptType>(_args); + if constexpr (Trinity::SpellScripts::IsAuraScript<Script1>) + return Trinity::new_from_tuple<Script1>(_args); + else if constexpr (Trinity::SpellScripts::IsAuraScript<Script2>) + return Trinity::new_from_tuple<Script2>(_args); else return nullptr; } @@ -1345,10 +1353,10 @@ private: ArgsType _args; }; -#define RegisterSpellScriptWithArgs(spell_script, script_name, ...) new GenericSpellAndAuraScriptLoader<BOOST_PP_REMOVE_PARENS(spell_script), decltype(std::make_tuple(__VA_ARGS__))>(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<BOOST_PP_REMOVE_PARENS(script_1), BOOST_PP_REMOVE_PARENS(script_2), decltype(std::make_tuple(__VA_ARGS__))>(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 AI> 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 <boost/algorithm/string/replace.hpp> #include <boost/dll/runtime_symbol_info.hpp> -#include <boost/filesystem.hpp> +#include <boost/filesystem/directory.hpp> +#include <boost/filesystem/operations.hpp> #include <boost/system/system_error.hpp> #include <efsw/efsw.hpp> #include <algorithm> 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 <boost/algorithm/string.hpp> - TC_GAME_API std::atomic<bool> 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<std::string_view> tokens = Trinity::Tokenize(motd, '@', true); + + _motd.reserve(tokens.size()); + + for (std::string_view const& token : tokens) + _motd.emplace_back(token); } std::vector<std::string> 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" |