diff options
author | Sadie Powell <sadie@witchery.services> | 2024-06-03 15:51:29 +0100 |
---|---|---|
committer | Sadie Powell <sadie@witchery.services> | 2024-06-03 16:04:53 +0100 |
commit | e71a9e289441fd78ffa1bd3d8c20ea2cb8542426 (patch) | |
tree | 95def1c721754ed095e2ca9654892343f611a953 /src | |
parent | f80bdf06bace6d3e5c50ed982fe1c14451ae4518 (diff) |
Avoid NickAlias lookups by storing a pointer in the NickCore.
Diffstat (limited to 'src')
-rw-r--r-- | src/nickalias.cpp | 2 | ||||
-rw-r--r-- | src/nickcore.cpp | 3 | ||||
-rw-r--r-- | src/users.cpp | 5 |
3 files changed, 9 insertions, 1 deletions
diff --git a/src/nickalias.cpp b/src/nickalias.cpp index cfcd13381..f7c6a79e2 100644 --- a/src/nickalias.cpp +++ b/src/nickalias.cpp @@ -31,6 +31,8 @@ NickAlias::NickAlias(const Anope::string &nickname, NickCore *nickcore) throw CoreException("Empty nickcore passed to NickAlias constructor"); nickcore->aliases->push_back(this); + if (this->nick.equals_ci(nickcore->display)) + nickcore->na = this; if (!NickAliasList->insert_or_assign(this->nick, this).second) Log(LOG_DEBUG) << "Duplicate nick " << this->nick << " in NickAlias table"; diff --git a/src/nickcore.cpp b/src/nickcore.cpp index 64aa4f504..0fa721f8d 100644 --- a/src/nickcore.cpp +++ b/src/nickcore.cpp @@ -149,7 +149,7 @@ Serializable *NickCore::Unserialize(Serializable *obj, Serialize::Data &data) return nc; } -void NickCore::SetDisplay(const NickAlias *na) +void NickCore::SetDisplay(NickAlias *na) { if (na->nc != this || na->nick == this->display) return; @@ -164,6 +164,7 @@ void NickCore::SetDisplay(const NickAlias *na) NickCoreList->erase(this->display); this->display = na->nick; + this->na = na; (*NickCoreList)[this->display] = this; } diff --git a/src/users.cpp b/src/users.cpp index 8273e888d..9462881f1 100644 --- a/src/users.cpp +++ b/src/users.cpp @@ -430,6 +430,11 @@ NickCore *User::Account() const return this->nc; } +NickAlias *User::AccountNick() const +{ + return this->nc ? this->nc->na : nullptr; +} + bool User::IsIdentified(bool check_nick) const { if (check_nick && this->nc) |