From dd96f21d17095b954b46f0659d8f14fcaf95e3a8 Mon Sep 17 00:00:00 2001 From: psychon Date: Wed, 24 Dec 2008 10:34:07 +0000 Subject: [PATCH] Make CNick smaller This removes some not-so-important cache and uses a CString instead of a set for saving the flags this nick has (op, voice, ...). set is huge! Before the virtual removal (r1300), CNick had 144 bytes, without the virtuals it only took 112 bytes. Now after this commit it is down to 40 bytes. (amd64) Happy Christmas tomaw ;) git-svn-id: https://znc.svn.sourceforge.net/svnroot/znc/trunk@1302 726aef4b-f618-498e-8847-2d620e286838 --- Nick.cpp | 25 ++++++++++--------------- Nick.h | 6 +----- 2 files changed, 11 insertions(+), 20 deletions(-) diff --git a/Nick.cpp b/Nick.cpp index b4ccdde4..b9c0ff3b 100644 --- a/Nick.cpp +++ b/Nick.cpp @@ -23,8 +23,7 @@ CNick::CNick(const CString& sNick) { CNick::~CNick() {} void CNick::Reset() { - m_cPerm = '\0'; - m_suChanPerms.clear(); + m_sChanPerms.clear(); } CString CNick::Concat(const CString& sNick, const CString& sSuffix, unsigned int uMaxNickLen) { @@ -77,13 +76,12 @@ unsigned int CNick::GetCommonChans(vector& vRetChans, CUser* pUser) cons } void CNick::SetUser(CUser* pUser) { m_pUser = pUser; } -void CNick::SetPermChar(char c) { m_cPerm = c; } void CNick::SetNick(const CString& s) { m_sNick = s; } void CNick::SetIdent(const CString& s) { m_sIdent = s; } void CNick::SetHost(const CString& s) { m_sHost = s; } bool CNick::HasPerm(unsigned char uPerm) const { - return (uPerm && m_suChanPerms.find(uPerm) != m_suChanPerms.end()); + return (uPerm && m_sChanPerms.find(uPerm) != CString::npos); } bool CNick::AddPerm(unsigned char uPerm) { @@ -91,39 +89,36 @@ bool CNick::AddPerm(unsigned char uPerm) { return false; } - m_suChanPerms.insert(uPerm); - UpdatePermChar(); + m_sChanPerms.append(1, uPerm); return true; } bool CNick::RemPerm(unsigned char uPerm) { - if (!HasPerm(uPerm)) { + CString::size_type uPos = m_sChanPerms.find(uPerm); + if (uPos == CString::npos) { return false; } - m_suChanPerms.erase(uPerm); - UpdatePermChar(); + m_sChanPerms.erase(uPos); return true; } -void CNick::UpdatePermChar() { +unsigned char CNick::GetPermChar() const { CIRCSock* pIRCSock = (!m_pUser) ? NULL : m_pUser->GetIRCSock(); const CString& sChanPerms = (!pIRCSock) ? "@+" : pIRCSock->GetPerms(); - m_cPerm = 0; for (unsigned int a = 0; a < sChanPerms.size(); a++) { const unsigned char& c = sChanPerms[a]; if (HasPerm(c)) { - m_cPerm = c; - break; + return c; } } + + return '\0'; } -const set& CNick::GetChanPerms() const { return m_suChanPerms; } -unsigned char CNick::GetPermChar() const { return m_cPerm; } CString CNick::GetPermStr() const { CIRCSock* pIRCSock = (!m_pUser) ? NULL : m_pUser->GetIRCSock(); const CString& sChanPerms = (!pIRCSock) ? "@+" : pIRCSock->GetPerms(); diff --git a/Nick.h b/Nick.h index b4d62c09..028adc6c 100644 --- a/Nick.h +++ b/Nick.h @@ -36,8 +36,6 @@ public: // Setters void SetUser(CUser* pUser); - void UpdatePermChar(); - void SetPermChar(char c); void SetNick(const CString& s); void SetIdent(const CString& s); void SetHost(const CString& s); @@ -46,7 +44,6 @@ public: // !Setters // Getters - const set& GetChanPerms() const; CString GetPermStr() const; unsigned char GetPermChar() const; bool HasPerm(unsigned char uPerm) const; @@ -57,8 +54,7 @@ public: // !Getters private: protected: - set m_suChanPerms; - unsigned char m_cPerm; + CString m_sChanPerms; CUser* m_pUser; CString m_sNick; CString m_sIdent;