[Performance] Change skill_cap from vector to map (#4252)

* Change skill_cap from vector to map

* Fix missed level check

* Integer based key

* Paren

---------

Co-authored-by: Akkadius <akkadius1@gmail.com>
This commit is contained in:
Xackery 2024-04-15 04:32:27 -07:00 committed by GitHub
parent d7d99152ac
commit a7bfc5ec92
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 11 additions and 17 deletions

View File

@ -13,16 +13,11 @@ SkillCapsRepository::SkillCaps SkillCaps::GetSkillCap(uint8 class_id, EQ::skills
return SkillCapsRepository::NewEntity(); return SkillCapsRepository::NewEntity();
} }
for (const auto &e: m_skill_caps) { uint64_t key = (class_id * 1000000) + (level * 1000) + static_cast<uint32>(skill_id);
if ( auto pos = m_skill_caps.find(key);
e.class_id == class_id && if (pos != m_skill_caps.end()) {
e.level == level && return pos->second;
static_cast<EQ::skills::SkillType>(e.skill_id) == skill_id
) {
return e;
}
} }
return SkillCapsRepository::NewEntity(); return SkillCapsRepository::NewEntity();
} }
@ -46,11 +41,9 @@ uint8 SkillCaps::GetTrainLevel(uint8 class_id, EQ::skills::SkillType skill_id, u
for (const auto &e: m_skill_caps) { for (const auto &e: m_skill_caps) {
for (uint8 current_level = 1; current_level <= max_level; current_level++) { for (uint8 current_level = 1; current_level <= max_level; current_level++) {
if ( uint64_t key = (class_id * 1000000) + (level * 1000) + static_cast<uint32>(skill_id);
e.class_id == class_id && auto pos = m_skill_caps.find(key);
static_cast<EQ::skills::SkillType>(e.skill_id) == skill_id && if (pos != m_skill_caps.end()) {
e.level == current_level
) {
return current_level; return current_level;
} }
} }
@ -63,7 +56,7 @@ void SkillCaps::LoadSkillCaps()
{ {
const auto &l = SkillCapsRepository::All(*m_content_database); const auto &l = SkillCapsRepository::All(*m_content_database);
m_skill_caps.reserve(l.size()); m_skill_caps.clear();
for (const auto &e: l) { for (const auto &e: l) {
if ( if (
@ -74,7 +67,8 @@ void SkillCaps::LoadSkillCaps()
continue; continue;
} }
m_skill_caps.emplace_back(e); uint64_t key = (e.class_id * 1000000) + (e.level * 1000) + e.skill_id;
m_skill_caps[key] = e;
} }
LogInfo( LogInfo(

View File

@ -17,7 +17,7 @@ public:
SkillCaps *SetContentDatabase(Database *db); SkillCaps *SetContentDatabase(Database *db);
private: private:
Database *m_content_database{}; Database *m_content_database{};
std::vector<SkillCapsRepository::SkillCaps> m_skill_caps = {}; std::map<uint64, SkillCapsRepository::SkillCaps> m_skill_caps = {};
}; };
extern SkillCaps skill_caps; extern SkillCaps skill_caps;