From 1e4232e7af4a36f5396855cb790a466ac31f3fa1 Mon Sep 17 00:00:00 2001 From: Shauren Date: Sun, 14 Sep 2025 14:13:16 +0200 Subject: Core/Scripts: Use std::string_view to find script id from script name --- src/server/game/Achievements/AchievementMgr.cpp | 2 +- src/server/game/Achievements/CriteriaHandler.cpp | 2 +- src/server/game/Battlefield/BattlefieldMgr.cpp | 2 +- src/server/game/Battlegrounds/BattlegroundMgr.cpp | 4 +-- src/server/game/Conditions/ConditionMgr.cpp | 2 +- src/server/game/Globals/AreaTriggerDataStore.cpp | 4 +-- src/server/game/Globals/ConversationDataStore.cpp | 2 +- src/server/game/Globals/ObjectMgr.cpp | 37 +++++++++++----------- src/server/game/Globals/ObjectMgr.h | 8 ++--- src/server/game/OutdoorPvP/OutdoorPvPMgr.cpp | 2 +- src/server/game/Quests/QuestDef.cpp | 2 +- src/server/game/Weather/WeatherMgr.cpp | 2 +- .../game/World/WorldStates/WorldStateMgr.cpp | 2 +- src/server/shared/Realm/ClientBuildInfo.cpp | 2 +- 14 files changed, 37 insertions(+), 36 deletions(-) (limited to 'src') diff --git a/src/server/game/Achievements/AchievementMgr.cpp b/src/server/game/Achievements/AchievementMgr.cpp index 8cdc4bc2f46..b7adb40ddde 100644 --- a/src/server/game/Achievements/AchievementMgr.cpp +++ b/src/server/game/Achievements/AchievementMgr.cpp @@ -1158,7 +1158,7 @@ void AchievementGlobalMgr::LoadAchievementScripts() Field* fields = result->Fetch(); uint32 achievementId = fields[0].GetUInt32(); - std::string scriptName = fields[1].GetString(); + std::string_view scriptName = fields[1].GetStringView(); AchievementEntry const* achievement = sAchievementStore.LookupEntry(achievementId); if (!achievement) diff --git a/src/server/game/Achievements/CriteriaHandler.cpp b/src/server/game/Achievements/CriteriaHandler.cpp index 3e1b4887956..3d444c2948c 100644 --- a/src/server/game/Achievements/CriteriaHandler.cpp +++ b/src/server/game/Achievements/CriteriaHandler.cpp @@ -4945,7 +4945,7 @@ void CriteriaMgr::LoadCriteriaData() } uint32 dataType = fields[1].GetUInt8(); - std::string scriptName = fields[4].GetString(); + std::string_view scriptName = fields[4].GetStringView(); uint32 scriptId = 0; if (!scriptName.empty()) { diff --git a/src/server/game/Battlefield/BattlefieldMgr.cpp b/src/server/game/Battlefield/BattlefieldMgr.cpp index 62df11e2b50..4847bd56ca5 100644 --- a/src/server/game/Battlefield/BattlefieldMgr.cpp +++ b/src/server/game/Battlefield/BattlefieldMgr.cpp @@ -64,7 +64,7 @@ void BattlefieldMgr::InitBattlefield() continue; } - BattlefieldIdToScriptId[typeId] = sObjectMgr->GetScriptId(fields[1].GetString()); + BattlefieldIdToScriptId[typeId] = sObjectMgr->GetScriptId(fields[1].GetStringView()); ++count; } while (result->NextRow()); diff --git a/src/server/game/Battlegrounds/BattlegroundMgr.cpp b/src/server/game/Battlegrounds/BattlegroundMgr.cpp index 8aed0d9d500..2739854926b 100644 --- a/src/server/game/Battlegrounds/BattlegroundMgr.cpp +++ b/src/server/game/Battlegrounds/BattlegroundMgr.cpp @@ -283,7 +283,7 @@ void BattlegroundMgr::LoadBattlegroundScriptTemplate() BattlegroundScriptTemplate& scriptTemplate = _battlegroundScriptTemplates[{ mapID, bgTypeId }]; scriptTemplate.MapId = mapID; scriptTemplate.Id = bgTypeId; - scriptTemplate.ScriptId = sObjectMgr->GetScriptId(fields[2].GetString()); + scriptTemplate.ScriptId = sObjectMgr->GetScriptId(fields[2].GetStringView()); ++count; } while (result->NextRow()); @@ -406,7 +406,7 @@ void BattlegroundMgr::LoadBattlegroundTemplates() float dist = fields[3].GetFloat(); bgTemplate.MaxStartDistSq = dist * dist; bgTemplate.Weight = fields[4].GetUInt8(); - bgTemplate.ScriptId = sObjectMgr->GetScriptId(fields[5].GetString()); + bgTemplate.ScriptId = sObjectMgr->GetScriptId(fields[5].GetStringView()); bgTemplate.BattlemasterEntry = bl; bgTemplate.MapIDs = std::move(mapsByBattleground[bgTypeId]); diff --git a/src/server/game/Conditions/ConditionMgr.cpp b/src/server/game/Conditions/ConditionMgr.cpp index 3838f6a63a9..fcf78441463 100644 --- a/src/server/game/Conditions/ConditionMgr.cpp +++ b/src/server/game/Conditions/ConditionMgr.cpp @@ -1336,7 +1336,7 @@ void ConditionMgr::LoadConditions(bool isReload) cond.NegativeCondition = fields[11].GetBool(); cond.ErrorType = fields[12].GetUInt32(); cond.ErrorTextId = fields[13].GetUInt32(); - cond.ScriptId = sObjectMgr->GetScriptId(fields[14].GetString()); + cond.ScriptId = sObjectMgr->GetScriptId(fields[14].GetStringView()); if (iConditionTypeOrReference >= 0) cond.ConditionType = ConditionTypes(iConditionTypeOrReference); diff --git a/src/server/game/Globals/AreaTriggerDataStore.cpp b/src/server/game/Globals/AreaTriggerDataStore.cpp index 705dfff7084..55a64148916 100644 --- a/src/server/game/Globals/AreaTriggerDataStore.cpp +++ b/src/server/game/Globals/AreaTriggerDataStore.cpp @@ -288,7 +288,7 @@ void AreaTriggerDataStore::LoadAreaTriggerTemplates() break; } - createProperties.ScriptId = sObjectMgr->GetScriptId(fields.ScriptName().GetString()); + createProperties.ScriptId = sObjectMgr->GetScriptId(fields.ScriptName().GetStringView()); if (std::vector* spline = Trinity::Containers::MapGetValuePtr(splinesByCreateProperties, createProperties.Id)) createProperties.Movement = std::move(*spline); @@ -439,7 +439,7 @@ void AreaTriggerDataStore::LoadAreaTriggerSpawns() spawn.phaseId = fields[10].GetUInt32(); spawn.phaseGroup = fields[11].GetUInt32(); - spawn.scriptId = sObjectMgr->GetScriptId(fields[12].GetString()); + spawn.scriptId = sObjectMgr->GetScriptId(fields[12].GetStringView()); spawn.spawnGroupData = sObjectMgr->GetLegacySpawnGroup(); // Add the trigger to a map::cell map, which is later used by GridLoader to query diff --git a/src/server/game/Globals/ConversationDataStore.cpp b/src/server/game/Globals/ConversationDataStore.cpp index fe2b5695293..eeba90a2032 100644 --- a/src/server/game/Globals/ConversationDataStore.cpp +++ b/src/server/game/Globals/ConversationDataStore.cpp @@ -241,7 +241,7 @@ void ConversationDataStore::LoadConversationTemplates() conversationTemplate.FirstLineId = fields[1].GetUInt32(); conversationTemplate.TextureKitId = fields[2].GetUInt32(); conversationTemplate.Flags = (ConversationFlags)fields[3].GetUInt8(); - conversationTemplate.ScriptId = sObjectMgr->GetScriptId(fields[4].GetString()); + conversationTemplate.ScriptId = sObjectMgr->GetScriptId(fields[4].GetStringView()); conversationTemplate.Actors = std::move(actorsByConversation[conversationTemplate.Id]); diff --git a/src/server/game/Globals/ObjectMgr.cpp b/src/server/game/Globals/ObjectMgr.cpp index dfb0beeb00e..f715dd6d6ac 100644 --- a/src/server/game/Globals/ObjectMgr.cpp +++ b/src/server/game/Globals/ObjectMgr.cpp @@ -465,7 +465,7 @@ void ObjectMgr::LoadCreatureTemplate(Field* fields) creatureTemplate.RegenHealth = fields[40].GetBool(); creatureTemplate.CreatureImmunitiesId = fields[41].GetInt32(); creatureTemplate.flags_extra = fields[42].GetUInt32(); - creatureTemplate.ScriptID = GetScriptId(fields[43].GetString()); + creatureTemplate.ScriptID = GetScriptId(fields[43].GetStringView()); creatureTemplate.StringId = fields[44].GetString(); } @@ -2184,7 +2184,7 @@ void ObjectMgr::LoadCreatures() data.phaseId = fields[22].GetUInt32(); data.phaseGroup = fields[23].GetUInt32(); data.terrainSwapMap = fields[24].GetInt32(); - data.scriptId = GetScriptId(fields[25].GetString()); + data.scriptId = GetScriptId(fields[25].GetStringView()); data.StringId = fields[26].GetString(); data.spawnGroupData = IsTransportMap(data.mapId) ? GetLegacySpawnGroup() : GetDefaultSpawnGroup(); // transport spawns default to compatibility group @@ -2654,7 +2654,7 @@ void ObjectMgr::LoadGameObjects() } } - data.scriptId = GetScriptId(fields[21].GetString()); + data.scriptId = GetScriptId(fields[21].GetStringView()); data.StringId = fields[22].GetString(); if (data.rotation.x < -1.0f || data.rotation.x > 1.0f) @@ -3431,7 +3431,7 @@ void ObjectMgr::LoadItemScriptNames() continue; } - itemTemplate->ScriptId = GetScriptId(fields[1].GetString()); + itemTemplate->ScriptId = GetScriptId(fields[1].GetStringView()); ++count; } while (result->NextRow()); } @@ -6027,7 +6027,7 @@ void ObjectMgr::LoadEventScripts() Field* fields = result->Fetch(); uint32 eventId = fields[0].GetUInt32(); - std::string const scriptName = fields[1].GetString(); + std::string_view scriptName = fields[1].GetStringView(); if (!IsValidEvent(eventId)) { @@ -6063,7 +6063,7 @@ void ObjectMgr::LoadSpellScriptNames() Field* fields = result->Fetch(); int32 spellId = fields[0].GetInt32(); - std::string const scriptName = fields[1].GetString(); + std::string_view scriptName = fields[1].GetStringView(); bool allRanks = false; if (spellId < 0) @@ -6279,7 +6279,7 @@ void ObjectMgr::LoadInstanceTemplate() InstanceTemplate instanceTemplate; instanceTemplate.Parent = uint32(fields[1].GetUInt16()); - instanceTemplate.ScriptId = GetScriptId(fields[2].GetString()); + instanceTemplate.ScriptId = GetScriptId(fields[2].GetStringView()); _instanceTemplateStore[mapID] = instanceTemplate; @@ -6699,7 +6699,7 @@ void ObjectMgr::LoadAreaTriggerScripts() Field* fields = result->Fetch(); uint32 triggerId = fields[0].GetUInt32(); - std::string const scriptName = fields[1].GetString(); + std::string_view scriptName = fields[1].GetStringView(); AreaTriggerEntry const* atEntry = sAreaTriggerStore.LookupEntry(triggerId); if (!atEntry) @@ -7705,7 +7705,7 @@ void ObjectMgr::LoadGameObjectTemplate() got.ContentTuningId = fields[43].GetInt32(); got.AIName = fields[44].GetString(); - got.ScriptId = GetScriptId(fields[45].GetString()); + got.ScriptId = GetScriptId(fields[45].GetStringView()); got.StringId = fields[46].GetString(); // Checks @@ -10032,16 +10032,17 @@ void ObjectMgr::ScriptNameContainer::reserve(size_t capacity) IndexToName.reserve(capacity); } -uint32 ObjectMgr::ScriptNameContainer::insert(std::string const& scriptName, bool isScriptNameBound) +uint32 ObjectMgr::ScriptNameContainer::insert(std::string_view scriptName, bool isScriptNameBound) { - auto result = NameToIndex.try_emplace(scriptName, static_cast(NameToIndex.size()), isScriptNameBound); - if (result.second) + auto result = NameToIndex.lower_bound(scriptName); + if (result == NameToIndex.end() || NameToIndex.key_comp()(scriptName, result->first)) { ASSERT(NameToIndex.size() <= std::numeric_limits::max()); - IndexToName.emplace_back(result.first); + result = NameToIndex.emplace_hint(result, scriptName, Entry(static_cast(NameToIndex.size()), isScriptNameBound)); + IndexToName.emplace_back(result); } - return result.first->second.Id; + return result->second.Id; } size_t ObjectMgr::ScriptNameContainer::size() const @@ -10054,7 +10055,7 @@ ObjectMgr::ScriptNameContainer::NameMap::const_iterator ObjectMgr::ScriptNameCon return index < IndexToName.size() ? IndexToName[index] : end(); } -ObjectMgr::ScriptNameContainer::NameMap::const_iterator ObjectMgr::ScriptNameContainer::find(std::string const& name) const +ObjectMgr::ScriptNameContainer::NameMap::const_iterator ObjectMgr::ScriptNameContainer::find(std::string_view name) const { // assume "" is the first element if (name.empty()) @@ -10115,7 +10116,7 @@ bool ObjectMgr::IsScriptDatabaseBound(uint32 id) const } } -uint32 ObjectMgr::GetScriptId(std::string const& name, bool isDatabaseBound) +uint32 ObjectMgr::GetScriptId(std::string_view name, bool isDatabaseBound) { return _scriptNamesStore.insert(name, isDatabaseBound); } @@ -11105,7 +11106,7 @@ void ObjectMgr::LoadSceneTemplates() sceneTemplate.PlaybackFlags = static_cast(fields[1].GetUInt32()); sceneTemplate.ScenePackageId = fields[2].GetUInt32(); sceneTemplate.Encrypted = fields[3].GetUInt8() != 0; - sceneTemplate.ScriptId = GetScriptId(fields[4].GetCString()); + sceneTemplate.ScriptId = GetScriptId(fields[4].GetStringView()); } while (templates->NextRow()); @@ -11156,7 +11157,7 @@ void ObjectMgr::LoadPlayerChoices() choice.ShowChoicesAsList = fields.ShowChoicesAsList().GetBool(); choice.ForceDontShowChoicesAsList = fields.ForceDontShowChoicesAsList().GetBool(); choice.MaxResponses = fields.MaxResponses().GetUInt32OrNull(); - choice.ScriptId = GetScriptId(fields.ScriptName().GetString()); + choice.ScriptId = GetScriptId(fields.ScriptName().GetStringView()); } while (choices->NextRow()); } diff --git a/src/server/game/Globals/ObjectMgr.h b/src/server/game/Globals/ObjectMgr.h index b8c4cc292ff..16cb17696cc 100644 --- a/src/server/game/Globals/ObjectMgr.h +++ b/src/server/game/Globals/ObjectMgr.h @@ -1014,7 +1014,7 @@ class TC_GAME_API ObjectMgr }; private: - using NameMap = std::map; + using NameMap = std::map>; NameMap NameToIndex; std::vector IndexToName; @@ -1023,10 +1023,10 @@ class TC_GAME_API ObjectMgr ScriptNameContainer(); void reserve(size_t capacity); - uint32 insert(std::string const& scriptName, bool isScriptNameBound = true); + uint32 insert(std::string_view scriptName, bool isScriptNameBound = true); size_t size() const; NameMap::const_iterator find(size_t index) const; - NameMap::const_iterator find(std::string const& name) const; + NameMap::const_iterator find(std::string_view name) const; NameMap::const_iterator end() const; std::unordered_set GetAllDBScriptNames() const; @@ -1578,7 +1578,7 @@ class TC_GAME_API ObjectMgr std::unordered_set GetAllDBScriptNames() const; std::string const& GetScriptName(uint32 id) const; bool IsScriptDatabaseBound(uint32 id) const; - uint32 GetScriptId(std::string const& name, bool isDatabaseBound = true); + uint32 GetScriptId(std::string_view name, bool isDatabaseBound = true); Trinity::IteratorPair GetSpellClickInfoMapBounds(uint32 creature_id) const { diff --git a/src/server/game/OutdoorPvP/OutdoorPvPMgr.cpp b/src/server/game/OutdoorPvP/OutdoorPvPMgr.cpp index d98f805342e..3632a1ca6ec 100644 --- a/src/server/game/OutdoorPvP/OutdoorPvPMgr.cpp +++ b/src/server/game/OutdoorPvP/OutdoorPvPMgr.cpp @@ -78,7 +78,7 @@ void OutdoorPvPMgr::InitOutdoorPvP() continue; } - m_OutdoorPvPDatas[typeId] = sObjectMgr->GetScriptId(fields[1].GetString()); + m_OutdoorPvPDatas[typeId] = sObjectMgr->GetScriptId(fields[1].GetStringView()); ++count; } diff --git a/src/server/game/Quests/QuestDef.cpp b/src/server/game/Quests/QuestDef.cpp index 610212d40a6..2903c93823f 100644 --- a/src/server/game/Quests/QuestDef.cpp +++ b/src/server/game/Quests/QuestDef.cpp @@ -257,7 +257,7 @@ void Quest::LoadQuestTemplateAddon(Field* fields) _requiredMaxRepValue = fields[15].GetInt32(); _sourceItemIdCount = fields[16].GetUInt8(); _specialFlags = fields[17].GetUInt8(); - _scriptId = sObjectMgr->GetScriptId(fields[18].GetString()); + _scriptId = sObjectMgr->GetScriptId(fields[18].GetStringView()); if (_specialFlags & QUEST_SPECIAL_FLAGS_AUTO_ACCEPT) _flags |= QUEST_FLAGS_AUTO_ACCEPT; diff --git a/src/server/game/Weather/WeatherMgr.cpp b/src/server/game/Weather/WeatherMgr.cpp index 833b26a81ff..75d19440b07 100644 --- a/src/server/game/Weather/WeatherMgr.cpp +++ b/src/server/game/Weather/WeatherMgr.cpp @@ -92,7 +92,7 @@ void LoadWeatherData() } } - wzc.ScriptId = sObjectMgr->GetScriptId(fields[13].GetString()); + wzc.ScriptId = sObjectMgr->GetScriptId(fields[13].GetStringView()); ++count; } diff --git a/src/server/game/World/WorldStates/WorldStateMgr.cpp b/src/server/game/World/WorldStates/WorldStateMgr.cpp index 9877bde5b85..df34905ba0c 100644 --- a/src/server/game/World/WorldStates/WorldStateMgr.cpp +++ b/src/server/game/World/WorldStates/WorldStateMgr.cpp @@ -126,7 +126,7 @@ void WorldStateMgr::LoadFromDB() id, areaIds); } - worldState.ScriptId = sObjectMgr->GetScriptId(fields[4].GetString()); + worldState.ScriptId = sObjectMgr->GetScriptId(fields[4].GetStringView()); if (!worldState.MapIds.empty()) { diff --git a/src/server/shared/Realm/ClientBuildInfo.cpp b/src/server/shared/Realm/ClientBuildInfo.cpp index d3d73071802..8fb44698bf3 100644 --- a/src/server/shared/Realm/ClientBuildInfo.cpp +++ b/src/server/shared/Realm/ClientBuildInfo.cpp @@ -146,7 +146,7 @@ void LoadBuildInfo() build.MajorVersion = fields[0].GetUInt32(); build.MinorVersion = fields[1].GetUInt32(); build.BugfixVersion = fields[2].GetUInt32(); - std::string hotfixVersion = fields[3].GetString(); + std::string_view hotfixVersion = fields[3].GetStringView(); if (hotfixVersion.length() < build.HotfixVersion.size()) std::ranges::copy(hotfixVersion, build.HotfixVersion.begin()); else -- cgit v1.2.3