From 0485aa80334120c00cd636b6fb2b3129ef1d4da2 Mon Sep 17 00:00:00 2001 From: J-P Nurmi Date: Tue, 24 Feb 2015 17:48:46 +0100 Subject: [PATCH 1/4] CClient: C++11 range-based for loops --- src/Client.cpp | 99 ++++++++++++++++++++++++-------------------------- 1 file changed, 47 insertions(+), 52 deletions(-) diff --git a/src/Client.cpp b/src/Client.cpp index b9377daa..c648c7bc 100644 --- a/src/Client.cpp +++ b/src/Client.cpp @@ -205,13 +205,12 @@ void CClient::ReadLine(const CString& sData) { return; // Don't forward this msg. We don't want the client getting us disconnected. } else if (sCommand.Equals("PROTOCTL")) { VCString vsTokens; - VCString::const_iterator it; sLine.Token(1, true).Split(" ", vsTokens, false); - for (it = vsTokens.begin(); it != vsTokens.end(); ++it) { - if (*it == "NAMESX") { + for (const CString& sToken : vsTokens) { + if (sToken == "NAMESX") { m_bNamesx = true; - } else if (*it == "UHNAMES") { + } else if (sToken == "UHNAMES") { m_bUHNames = true; } } @@ -433,12 +432,11 @@ void CClient::ReadLine(const CString& sData) { CString sChans = sLine.Token(1).TrimPrefix_n(); CString sKey = sLine.Token(2); - VCString vChans; - sChans.Split(",", vChans, false); + VCString vsChans; + sChans.Split(",", vsChans, false); sChans.clear(); - for (unsigned int a = 0; a < vChans.size(); a++) { - CString sChannel = vChans[a]; + for (CString& sChannel : vsChans) { bool bContinue = false; NETWORKMODULECALL(OnUserJoin(sChannel, sKey), m_pUser, m_pNetwork, this, &bContinue); if (bContinue) continue; @@ -470,12 +468,11 @@ void CClient::ReadLine(const CString& sData) { CString sChans = sLine.Token(1).TrimPrefix_n(); CString sMessage = sLine.Token(2, true).TrimPrefix_n(); - VCString vChans; - sChans.Split(",", vChans, false); + VCString vsChans; + sChans.Split(",", vsChans, false); sChans.clear(); - for (VCString::const_iterator it = vChans.begin(); it != vChans.end(); ++it) { - CString sChan = *it; + for (CString& sChan : vsChans) { bool bContinue = false; NETWORKMODULECALL(OnUserPart(sChan, sMessage), m_pUser, m_pNetwork, this, &bContinue); if (bContinue) continue; @@ -545,9 +542,9 @@ void CClient::SetNetwork(CIRCNetwork* pNetwork, bool bDisconnect, bool bReconnec // Tell the client they are no longer in these channels. const vector& vChans = m_pNetwork->GetChans(); - for (vector::const_iterator it = vChans.begin(); it != vChans.end(); ++it) { - if (!((*it)->IsDetached())) { - PutClient(":" + m_pNetwork->GetIRCNick().GetNickMask() + " PART " + (*it)->GetName()); + for (const CChan* pChan : vChans) { + if (!(pChan->IsDetached())) { + PutClient(":" + m_pNetwork->GetIRCNick().GetNickMask() + " PART " + pChan->GetName()); } } } else if (m_pUser) { @@ -607,11 +604,11 @@ bool CClient::SendMotd() { return false; } - for (unsigned int a = 0; a < vsMotd.size(); a++) { + for (const CString& sLine : vsMotd) { if (m_pNetwork) { - PutStatusNotice(m_pNetwork->ExpandString(vsMotd[a])); + PutStatusNotice(m_pNetwork->ExpandString(sLine)); } else { - PutStatusNotice(m_pUser->ExpandString(vsMotd[a])); + PutStatusNotice(m_pUser->ExpandString(sLine)); } } @@ -812,17 +809,16 @@ void CClient::PutModNotice(const CString& sModule, const CString& sLine) { } void CClient::PutModule(const CString& sModule, const CString& sLine) { - VCString vsLines; - VCString::iterator it; if (!m_pUser) { return; } DEBUG("(" << GetFullName() << ") ZNC -> CLI [:" + m_pUser->GetStatusPrefix() + ((sModule.empty()) ? "status" : sModule) + "!znc@znc.in PRIVMSG " << GetNick() << " :" << sLine << "]"); + VCString vsLines; sLine.Split("\n", vsLines); - for (it = vsLines.begin(); it != vsLines.end(); ++it) { - Write(":" + m_pUser->GetStatusPrefix() + ((sModule.empty()) ? "status" : sModule) + "!znc@znc.in PRIVMSG " + GetNick() + " :" + (*it) + "\r\n"); + for (const CString& s : vsLines) { + Write(":" + m_pUser->GetStatusPrefix() + ((sModule.empty()) ? "status" : sModule) + "!znc@znc.in PRIVMSG " + GetNick() + " :" + s + "\r\n"); } } @@ -882,11 +878,13 @@ void CClient::HandleCap(const CString& sLine) if (sSubCmd.Equals("LS")) { SCString ssOfferCaps; GLOBALMODULECALL(OnClientCapLs(this, ssOfferCaps), NOTHING); - CString sRes; - for (SCString::iterator i = ssOfferCaps.begin(); i != ssOfferCaps.end(); ++i) { - sRes += *i + " "; - } - RespondCap("LS :" + sRes + "userhost-in-names multi-prefix znc.in/server-time-iso znc.in/batch znc.in/self-message"); + ssOfferCaps.insert("userhost-in-names"); + ssOfferCaps.insert("multi-prefix"); + ssOfferCaps.insert("znc.in/server-time-iso"); + ssOfferCaps.insert("znc.in/batch"); + ssOfferCaps.insert("znc.in/self-message"); + CString sRes = CString(" ").Join(ssOfferCaps.begin(), ssOfferCaps.end()); + RespondCap("LS :" + sRes); m_bInCap = true; } else if (sSubCmd.Equals("END")) { m_bInCap = false; @@ -899,12 +897,11 @@ void CClient::HandleCap(const CString& sLine) } } else if (sSubCmd.Equals("REQ")) { VCString vsTokens; - VCString::iterator it; sLine.Token(2, true).TrimPrefix_n(":").Split(" ", vsTokens, false); - for (it = vsTokens.begin(); it != vsTokens.end(); ++it) { + for (const CString& sToken : vsTokens) { bool bVal = true; - CString sCap = *it; + CString sCap = sToken; if (sCap.TrimPrefix("-")) bVal = false; @@ -919,46 +916,44 @@ void CClient::HandleCap(const CString& sLine) } // All is fine, we support what was requested - for (it = vsTokens.begin(); it != vsTokens.end(); ++it) { + for (const CString& sToken : vsTokens) { bool bVal = true; - if (it->TrimPrefix("-")) + CString sCap = sToken; + if (sCap.TrimPrefix("-")) bVal = false; - if ("multi-prefix" == *it) { + if ("multi-prefix" == sCap) { m_bNamesx = bVal; - } else if ("userhost-in-names" == *it) { + } else if ("userhost-in-names" == sCap) { m_bUHNames = bVal; - } else if ("znc.in/server-time-iso" == *it) { + } else if ("znc.in/server-time-iso" == sCap) { m_bServerTime = bVal; - } else if ("znc.in/batch" == *it) { + } else if ("znc.in/batch" == sCap) { m_bBatch = bVal; - } else if ("znc.in/self-message" == *it) { + } else if ("znc.in/self-message" == sCap) { m_bSelfMessage = bVal; } - GLOBALMODULECALL(OnClientCapRequest(this, *it, bVal), NOTHING); + GLOBALMODULECALL(OnClientCapRequest(this, sCap, bVal), NOTHING); if (bVal) { - m_ssAcceptedCaps.insert(*it); + m_ssAcceptedCaps.insert(sCap); } else { - m_ssAcceptedCaps.erase(*it); + m_ssAcceptedCaps.erase(sCap); } } RespondCap("ACK :" + sLine.Token(2, true).TrimPrefix_n(":")); } else if (sSubCmd.Equals("LIST")) { - CString sList = ""; - for (SCString::iterator i = m_ssAcceptedCaps.begin(); i != m_ssAcceptedCaps.end(); ++i) { - sList += *i + " "; - } - RespondCap("LIST :" + sList.TrimSuffix_n(" ")); + CString sList = CString(" ").Join(m_ssAcceptedCaps.begin(), m_ssAcceptedCaps.end()); + RespondCap("LIST :" + sList); } else if (sSubCmd.Equals("CLEAR")) { SCString ssRemoved; - for (SCString::iterator i = m_ssAcceptedCaps.begin(); i != m_ssAcceptedCaps.end(); ++i) { + for (const CString& sCap : m_ssAcceptedCaps) { bool bRemoving = false; - GLOBALMODULECALL(IsClientCapSupported(this, *i, false), &bRemoving); + GLOBALMODULECALL(IsClientCapSupported(this, sCap, false), &bRemoving); if (bRemoving) { - GLOBALMODULECALL(OnClientCapRequest(this, *i, false), NOTHING); - ssRemoved.insert(*i); + GLOBALMODULECALL(OnClientCapRequest(this, sCap, false), NOTHING); + ssRemoved.insert(sCap); } } if (m_bNamesx) { @@ -982,9 +977,9 @@ void CClient::HandleCap(const CString& sLine) ssRemoved.insert("znc.in/self-message"); } CString sList = ""; - for (SCString::iterator i = ssRemoved.begin(); i != ssRemoved.end(); ++i) { - m_ssAcceptedCaps.erase(*i); - sList += "-" + *i + " "; + for (const CString& sCap : ssRemoved) { + m_ssAcceptedCaps.erase(sCap); + sList += "-" + sCap + " "; } RespondCap("ACK :" + sList.TrimSuffix_n(" ")); } else { From 608499016386e01d7eb3816c7212536814416371 Mon Sep 17 00:00:00 2001 From: J-P Nurmi Date: Tue, 24 Feb 2015 19:41:36 +0100 Subject: [PATCH 2/4] CModules: C++11 range-based for loops --- src/Modules.cpp | 107 +++++++++++++++--------------------------------- 1 file changed, 34 insertions(+), 73 deletions(-) diff --git a/src/Modules.cpp b/src/Modules.cpp index 55a1a311..5d995d31 100644 --- a/src/Modules.cpp +++ b/src/Modules.cpp @@ -35,9 +35,8 @@ bool ZNC_NO_NEED_TO_DO_ANYTHING_ON_MODULE_CALL_EXITER; #endif #define MODUNLOADCHK(func) \ - for (unsigned int a = 0; a < size(); a++) { \ + for (CModule* pMod : *this) { \ try { \ - CModule* pMod = (CModule *) (*this)[a]; \ CClient* pOldClient = pMod->GetClient(); \ pMod->SetClient(m_pClient); \ CUser* pOldUser = NULL; \ @@ -58,7 +57,7 @@ bool ZNC_NO_NEED_TO_DO_ANYTHING_ON_MODULE_CALL_EXITER; pMod->SetClient(pOldClient); \ } catch (const CModule::EModException& e) { \ if (e == CModule::UNLOAD) { \ - UnloadModule((*this)[a]->GetModName()); \ + UnloadModule(pMod->GetModName()); \ } \ } \ } @@ -66,9 +65,8 @@ bool ZNC_NO_NEED_TO_DO_ANYTHING_ON_MODULE_CALL_EXITER; #define MODHALTCHK(func) \ bool bHaltCore = false; \ - for (unsigned int a = 0; a < size(); a++) { \ + for (CModule* pMod : *this) { \ try { \ - CModule* pMod = (CModule*) (*this)[a]; \ CModule::EModRet e = CModule::CONTINUE; \ CClient* pOldClient = pMod->GetClient(); \ pMod->SetClient(m_pClient); \ @@ -98,7 +96,7 @@ bool ZNC_NO_NEED_TO_DO_ANYTHING_ON_MODULE_CALL_EXITER; } \ } catch (const CModule::EModException& e) { \ if (e == CModule::UNLOAD) { \ - UnloadModule((*this)[a]->GetModName()); \ + UnloadModule(pMod->GetModName()); \ } \ } \ } \ @@ -317,15 +315,7 @@ bool CModule::RemTimer(const CString& sLabel) { } bool CModule::UnlinkTimer(CTimer* pTimer) { - set::iterator it; - for (it = m_sTimers.begin(); it != m_sTimers.end(); ++it) { - if (pTimer == *it) { - m_sTimers.erase(it); - return true; - } - } - - return false; + return m_sTimers.erase(pTimer); } CTimer* CModule::FindTimer(const CString& sLabel) { @@ -333,9 +323,7 @@ CTimer* CModule::FindTimer(const CString& sLabel) { return NULL; } - set::iterator it; - for (it = m_sTimers.begin(); it != m_sTimers.end(); ++it) { - CTimer* pTimer = *it; + for (CTimer* pTimer : m_sTimers) { if (pTimer->GetName().Equals(sLabel)) { return pTimer; } @@ -356,9 +344,7 @@ void CModule::ListTimers() { Table.AddColumn("Cycles"); Table.AddColumn("Description"); - set::iterator it; - for (it = m_sTimers.begin(); it != m_sTimers.end(); ++it) { - CTimer* pTimer = *it; + for (const CTimer* pTimer : m_sTimers) { unsigned int uCycles = pTimer->GetCyclesLeft(); timeval Interval = pTimer->GetInterval(); @@ -382,25 +368,18 @@ bool CModule::AddSocket(CSocket* pSocket) { } bool CModule::RemSocket(CSocket* pSocket) { - set::iterator it; - for (it = m_sSockets.begin(); it != m_sSockets.end(); ++it) { - if (*it == pSocket) { - m_sSockets.erase(it); - m_pManager->DelSockByAddr(pSocket); - return true; - } + if (m_sSockets.erase(pSocket)) { + m_pManager->DelSockByAddr(pSocket); + return true; } return false; } bool CModule::RemSocket(const CString& sSockName) { - set::iterator it; - for (it = m_sSockets.begin(); it != m_sSockets.end(); ++it) { - CSocket* pSocket = *it; - + for (CSocket* pSocket : m_sSockets) { if (pSocket->GetSockName().Equals(sSockName)) { - m_sSockets.erase(it); + m_sSockets.erase(pSocket); m_pManager->DelSockByAddr(pSocket); return true; } @@ -410,21 +389,11 @@ bool CModule::RemSocket(const CString& sSockName) { } bool CModule::UnlinkSocket(CSocket* pSocket) { - set::iterator it; - for (it = m_sSockets.begin(); it != m_sSockets.end(); ++it) { - if (pSocket == *it) { - m_sSockets.erase(it); - return true; - } - } - - return false; + return m_sSockets.erase(pSocket); } CSocket* CModule::FindSocket(const CString& sSockName) { - set::iterator it; - for (it = m_sSockets.begin(); it != m_sSockets.end(); ++it) { - CSocket* pSocket = *it; + for (CSocket* pSocket : m_sSockets) { if (pSocket->GetSockName().Equals(sSockName)) { return pSocket; } @@ -447,10 +416,7 @@ void CModule::ListSockets() { Table.AddColumn("RemoteIP"); Table.AddColumn("RemotePort"); - set::iterator it; - for (it = m_sSockets.begin(); it != m_sSockets.end(); ++it) { - CSocket* pSocket = *it; - + for (const CSocket* pSocket : m_sSockets) { Table.AddRow(); Table.SetCell("Name", pSocket->GetSockName()); @@ -491,10 +457,9 @@ void CModule::CancelJob(CModuleJob *pJob) bool CModule::CancelJob(const CString& sJobName) { - set::iterator it; - for (it = m_sJobs.begin(); it != m_sJobs.end(); ++it) { - if ((*it)->GetName().Equals(sJobName)) { - CancelJob(*it); + for (CModuleJob* pJob : m_sJobs) { + if (pJob->GetName().Equals(sJobName)) { + CancelJob(pJob); return true; } } @@ -551,11 +516,10 @@ bool CModule::RemCommand(const CString& sCmd) const CModCommand* CModule::FindCommand(const CString& sCmd) const { - map::const_iterator it; - for (it = m_mCommands.begin(); it != m_mCommands.end(); ++it) { - if (!it->first.Equals(sCmd)) + for (const auto& it : m_mCommands) { + if (!it.first.Equals(sCmd)) continue; - return &it->second; + return &it.second; } return NULL; } @@ -577,13 +541,12 @@ bool CModule::HandleCommand(const CString& sLine) { void CModule::HandleHelpCommand(const CString& sLine) { CString sFilter = sLine.Token(1).AsLower(); CTable Table; - map::const_iterator it; CModCommand::InitHelp(Table); - for (it = m_mCommands.begin(); it != m_mCommands.end(); ++it) { - CString sCmd = it->second.GetCommand().AsLower(); + for (const auto& it : m_mCommands) { + CString sCmd = it.second.GetCommand().AsLower(); if (sFilter.empty() || (sCmd.StartsWith(sFilter, CString::CaseSensitive)) || sCmd.WildCmp(sFilter)) { - it->second.AddHelp(Table); + it.second.AddHelp(Table); } } if (Table.empty()) { @@ -803,14 +766,14 @@ void CModules::UnloadAll() { } bool CModules::OnBoot() { - for (unsigned int a = 0; a < size(); a++) { + for (CModule* pMod : *this) { try { - if (!(*this)[a]->OnBoot()) { + if (!pMod->OnBoot()) { return true; } } catch (const CModule::EModException& e) { if (e == CModule::UNLOAD) { - UnloadModule((*this)[a]->GetModName()); + UnloadModule(pMod->GetModName()); } } } @@ -893,9 +856,8 @@ bool CModules::OnModCTCP(const CString& sMessage) { MODUNLOADCHK(OnModCTCP(sMess // Why MODHALTCHK works only with functions returning EModRet ? :( bool CModules::OnServerCapAvailable(const CString& sCap) { bool bResult = false; - for (unsigned int a = 0; a < size(); ++a) { + for (CModule* pMod : *this) { try { - CModule* pMod = (*this)[a]; CClient* pOldClient = pMod->GetClient(); pMod->SetClient(m_pClient); if (m_pUser) { @@ -910,7 +872,7 @@ bool CModules::OnServerCapAvailable(const CString& sCap) { pMod->SetClient(pOldClient); } catch (const CModule::EModException& e) { if (CModule::UNLOAD == e) { - UnloadModule((*this)[a]->GetModName()); + UnloadModule(pMod->GetModName()); } } } @@ -956,9 +918,8 @@ bool CModules::OnClientCapLs(CClient* pClient, SCString& ssCaps) { // Maybe create new macro for this? bool CModules::IsClientCapSupported(CClient* pClient, const CString& sCap, bool bState) { bool bResult = false; - for (unsigned int a = 0; a < size(); ++a) { + for (CModule* pMod : *this) { try { - CModule* pMod = (CModule*) (*this)[a]; CClient* pOldClient = pMod->GetClient(); pMod->SetClient(m_pClient); if (m_pUser) { @@ -973,7 +934,7 @@ bool CModules::IsClientCapSupported(CClient* pClient, const CString& sCap, bool pMod->SetClient(pOldClient); } catch (const CModule::EModException& e) { if (CModule::UNLOAD == e) { - UnloadModule((*this)[a]->GetModName()); + UnloadModule(pMod->GetModName()); } } } @@ -1006,9 +967,9 @@ bool CModules::OnGetAvailableMods(set& ssMods, CModInfo::EModuleType e CModule* CModules::FindModule(const CString& sModule) const { - for (unsigned int a = 0; a < size(); a++) { - if (sModule.Equals((*this)[a]->GetModName())) { - return (*this)[a]; + for (CModule* pMod : *this) { + if (sModule.Equals(pMod->GetModName())) { + return pMod; } } From 21a04c3b98bca4fef473ac5c8d4e35916a99d633 Mon Sep 17 00:00:00 2001 From: J-P Nurmi Date: Tue, 24 Feb 2015 19:52:00 +0100 Subject: [PATCH 3/4] CWebModules: C++11 range-based for loops --- src/WebModules.cpp | 65 +++++++++++++++++++--------------------------- 1 file changed, 27 insertions(+), 38 deletions(-) diff --git a/src/WebModules.cpp b/src/WebModules.cpp index 1c1c5e93..be344989 100644 --- a/src/WebModules.cpp +++ b/src/WebModules.cpp @@ -120,14 +120,14 @@ void CWebSession::ClearMessageLoops() { } void CWebSession::FillMessageLoops(CTemplate& Tmpl) { - for (unsigned int a = 0; a < m_vsErrorMsgs.size(); a++) { + for (const CString& sMessage : m_vsErrorMsgs) { CTemplate& Row = Tmpl.AddRow("ErrorLoop"); - Row["Message"] = m_vsErrorMsgs[a]; + Row["Message"] = sMessage; } - for (unsigned int b = 0; b < m_vsSuccessMsgs.size(); b++) { + for (const CString& sMessage : m_vsSuccessMsgs) { CTemplate& Row = Tmpl.AddRow("SuccessLoop"); - Row["Message"] = m_vsSuccessMsgs[b]; + Row["Message"] = sMessage; } } @@ -232,20 +232,16 @@ void CWebSock::GetAvailSkins(VCString& vRet) const { if (!sRoot.empty() && CFile::IsDir(sRoot)) { CDir Dir(sRoot); - for (unsigned int d = 0; d < Dir.size(); d++) { - const CFile& SubDir = *Dir[d]; - - if (SubDir.IsDir() && SubDir.GetShortName() == "_default_") { - vRet.push_back(SubDir.GetShortName()); + for (const CFile* pSubDir : Dir) { + if (pSubDir->IsDir() && pSubDir->GetShortName() == "_default_") { + vRet.push_back(pSubDir->GetShortName()); break; } } - for (unsigned int e = 0; e < Dir.size(); e++) { - const CFile& SubDir = *Dir[e]; - - if (SubDir.IsDir() && SubDir.GetShortName() != "_default_" && SubDir.GetShortName() != ".svn") { - vRet.push_back(SubDir.GetShortName()); + for (const CFile* pSubDir : Dir) { + if (pSubDir->IsDir() && pSubDir->GetShortName() != "_default_" && pSubDir->GetShortName() != ".svn") { + vRet.push_back(pSubDir->GetShortName()); } } } @@ -302,9 +298,9 @@ VCString CWebSock::GetDirs(CModule* pModule, bool bIsTemplate) { CString CWebSock::FindTmpl(CModule* pModule, const CString& sName) { VCString vsDirs = GetDirs(pModule, true); CString sFile = pModule->GetModName() + "_" + sName; - for (size_t i = 0; i < vsDirs.size(); ++i) { - if (CFile::Exists(CDir::ChangeDir(vsDirs[i], sFile))) { - m_Template.AppendPath(vsDirs[i]); + for (const CString& sDir : vsDirs) { + if (CFile::Exists(CDir::ChangeDir(sDir, sFile))) { + m_Template.AppendPath(sDir); return sFile; } } @@ -315,8 +311,8 @@ void CWebSock::SetPaths(CModule* pModule, bool bIsTemplate) { m_Template.ClearPaths(); VCString vsDirs = GetDirs(pModule, bIsTemplate); - for (size_t i = 0; i < vsDirs.size(); ++i) { - m_Template.AppendPath(vsDirs[i]); + for (const CString& sDir : vsDirs) { + m_Template.AppendPath(sDir); } m_bPathsSet = true; @@ -340,28 +336,27 @@ void CWebSock::SetVars() { // Global Mods CModules& vgMods = CZNC::Get().GetModules(); - for (unsigned int a = 0; a < vgMods.size(); a++) { - AddModLoop("GlobalModLoop", *vgMods[a]); + for (CModule* pgMod : vgMods) { + AddModLoop("GlobalModLoop", *pgMod); } // User Mods if (IsLoggedIn()) { CModules& vMods = GetSession()->GetUser()->GetModules(); - for (unsigned int a = 0; a < vMods.size(); a++) { - AddModLoop("UserModLoop", *vMods[a]); + for (CModule* pMod : vMods) { + AddModLoop("UserModLoop", *pMod); } vector vNetworks = GetSession()->GetUser()->GetNetworks(); - vector::iterator it; - for (it = vNetworks.begin(); it != vNetworks.end(); ++it) { - CModules& vnMods = (*it)->GetModules(); + for (CIRCNetwork* pNetwork : vNetworks) { + CModules& vnMods = pNetwork->GetModules(); CTemplate& Row = m_Template.AddRow("NetworkModLoop"); - Row["NetworkName"] = (*it)->GetName(); + Row["NetworkName"] = pNetwork->GetName(); - for (unsigned int a = 0; a < vnMods.size(); a++) { - AddModLoop("ModLoop", *vnMods[a], &Row); + for (CModule* pnMod : vnMods) { + AddModLoop("ModLoop", *pnMod, &Row); } } } @@ -415,9 +410,7 @@ bool CWebSock::AddModLoop(const CString& sLoopName, CModule& Module, CTemplate * VWebSubPages& vSubPages = Module.GetSubPages(); - for (unsigned int a = 0; a < vSubPages.size(); a++) { - TWebSubPage& SubPage = vSubPages[a]; - + for (TWebSubPage& SubPage : vSubPages) { // bActive is whether or not the current url matches this subpage (params will be checked below) bool bActive = (m_sModName == Module.GetModName() && m_sPage == SubPage->GetName() && bActiveModule); @@ -435,9 +428,7 @@ bool CWebSock::AddModLoop(const CString& sLoopName, CModule& Module, CTemplate * CString& sParams = SubRow["Params"]; const VPair& vParams = SubPage->GetParams(); - for (size_t b = 0; b < vParams.size(); b++) { - pair ssNV = vParams[b]; - + for (const pair& ssNV : vParams) { if (!sParams.empty()) { sParams += "&"; } @@ -750,9 +741,7 @@ CWebSock::EPageReqResult CWebSock::OnPageRequestInternal(const CString& sURI, CS VWebSubPages& vSubPages = pModule->GetSubPages(); - for (unsigned int a = 0; a < vSubPages.size(); a++) { - TWebSubPage& SubPage = vSubPages[a]; - + for (TWebSubPage& SubPage : vSubPages) { bool bActive = (m_sModName == pModule->GetModName() && m_sPage == SubPage->GetName()); if (bActive && SubPage->RequiresAdmin() && !GetSession()->IsAdmin()) { From 84e289cc76164f70b27cd5b776f3da8d25c7444c Mon Sep 17 00:00:00 2001 From: J-P Nurmi Date: Tue, 24 Feb 2015 20:15:36 +0100 Subject: [PATCH 4/4] CUser: C++11 range-based for loops --- src/User.cpp | 198 +++++++++++++++++++++++---------------------------- 1 file changed, 89 insertions(+), 109 deletions(-) diff --git a/src/User.cpp b/src/User.cpp index 970039df..7209a867 100644 --- a/src/User.cpp +++ b/src/User.cpp @@ -39,9 +39,8 @@ private: protected: virtual void RunJob() { const vector& vUserClients = m_pUser->GetUserClients(); - for (size_t c = 0; c < vUserClients.size(); ++c) { - CClient* pUserClient = vUserClients[c]; + for (CClient* pUserClient : vUserClients) { if (pUserClient->GetTimeSinceLastDataTransaction() >= CIRCNetwork::PING_FREQUENCY) { pUserClient->PutClient("PING :ZNC"); } @@ -130,14 +129,12 @@ bool CUser::ParseConfig(CConfig* pConfig, CString& sError) { { "skin", &CUser::SetSkinName }, { "clientencoding", &CUser::SetClientEncoding }, }; - size_t numStringOptions = sizeof(StringOptions) / sizeof(StringOptions[0]); TOption UIntOptions[] = { { "jointries", &CUser::SetJoinTries }, { "maxnetworks", &CUser::SetMaxNetworks }, { "maxquerybuffers", &CUser::SetMaxQueryBuffers }, { "maxjoins", &CUser::SetMaxJoins }, }; - size_t numUIntOptions = sizeof(UIntOptions) / sizeof(UIntOptions[0]); TOption BoolOptions[] = { { "keepbuffer", &CUser::SetKeepBuffer }, // XXX compatibility crap from pre-0.207 { "autoclearchanbuffer", &CUser::SetAutoClearChanBuffer }, @@ -150,34 +147,31 @@ bool CUser::ParseConfig(CConfig* pConfig, CString& sError) { { "appendtimestamp", &CUser::SetTimestampAppend }, { "prependtimestamp", &CUser::SetTimestampPrepend }, }; - size_t numBoolOptions = sizeof(BoolOptions) / sizeof(BoolOptions[0]); - for (size_t i = 0; i < numStringOptions; i++) { + for (const auto& Option : StringOptions) { CString sValue; - if (pConfig->FindStringEntry(StringOptions[i].name, sValue)) - (this->*StringOptions[i].pSetter)(sValue); + if (pConfig->FindStringEntry(Option.name, sValue)) + (this->*Option.pSetter)(sValue); } - for (size_t i = 0; i < numUIntOptions; i++) { + for (const auto& Option : UIntOptions) { CString sValue; - if (pConfig->FindStringEntry(UIntOptions[i].name, sValue)) - (this->*UIntOptions[i].pSetter)(sValue.ToUInt()); + if (pConfig->FindStringEntry(Option.name, sValue)) + (this->*Option.pSetter)(sValue.ToUInt()); } - for (size_t i = 0; i < numBoolOptions; i++) { + for (const auto& Option : BoolOptions) { CString sValue; - if (pConfig->FindStringEntry(BoolOptions[i].name, sValue)) - (this->*BoolOptions[i].pSetter)(sValue.ToBool()); + if (pConfig->FindStringEntry(Option.name, sValue)) + (this->*Option.pSetter)(sValue.ToBool()); } VCString vsList; - VCString::const_iterator vit; pConfig->FindStringVector("allow", vsList); - for (vit = vsList.begin(); vit != vsList.end(); ++vit) { - AddAllowedHost(*vit); + for (const CString& sHost : vsList) { + AddAllowedHost(sHost); } pConfig->FindStringVector("ctcpreply", vsList); - for (vit = vsList.begin(); vit != vsList.end(); ++vit) { - const CString& sValue = *vit; - AddCTCPReply(sValue.Token(0), sValue.Token(1, true)); + for (const CString& sReply : vsList) { + AddCTCPReply(sReply.Token(0), sReply.Token(1, true)); } CString sValue; @@ -355,9 +349,8 @@ bool CUser::ParseConfig(CConfig* pConfig, CString& sError) { } pConfig->FindStringVector("loadmodule", vsList); - for (vit = vsList.begin(); vit != vsList.end(); ++vit) { - sValue = *vit; - CString sModName = sValue.Token(0); + for (const CString& sMod : vsList) { + CString sModName = sMod.Token(0); CString sNotice = "Loading user module [" + sModName + "]"; // XXX Legacy crap, added in ZNC 0.089 @@ -394,26 +387,26 @@ bool CUser::ParseConfig(CConfig* pConfig, CString& sError) { if (sModName == "charset") { CUtils::PrintAction("NOTICE: Charset support was moved to core, importing old charset module settings"); size_t uIndex = 1; - if (sValue.Token(uIndex).Equals("-force")) { + if (sMod.Token(uIndex).Equals("-force")) { uIndex++; } VCString vsClient, vsServer; - sValue.Token(uIndex).Split(",", vsClient); - sValue.Token(uIndex + 1).Split(",", vsServer); + sMod.Token(uIndex).Split(",", vsClient); + sMod.Token(uIndex + 1).Split(",", vsServer); if (vsClient.empty() || vsServer.empty()) { CUtils::PrintStatus(false, "charset module was loaded with wrong parameters."); continue; } SetClientEncoding(vsClient[0]); - for (vector::iterator it = m_vIRCNetworks.begin(); it != m_vIRCNetworks.end(); ++it) { - (*it)->SetEncoding(vsServer[0]); + for (CIRCNetwork* pNetwork : m_vIRCNetworks) { + pNetwork->SetEncoding(vsServer[0]); } CUtils::PrintStatus(true, "Using [" + vsClient[0] + "] for clients, and [" + vsServer[0] + "] for servers"); continue; } CString sModRet; - CString sArgs = sValue.Token(1, true); + CString sArgs = sMod.Token(1, true); bool bModRet = LoadModule(sModName, sArgs, sNotice, sModRet); @@ -438,8 +431,8 @@ bool CUser::ParseConfig(CConfig* pConfig, CString& sError) { // Move ircconnectenabled to the networks if (pConfig->FindStringEntry("ircconnectenabled", sValue)) { - for (vector::iterator it = m_vIRCNetworks.begin(); it != m_vIRCNetworks.end(); ++it) { - (*it)->SetIRCConnectEnabled(sValue.ToBool()); + for (CIRCNetwork* pNetwork : m_vIRCNetworks) { + pNetwork->SetIRCConnectEnabled(sValue.ToBool()); } } @@ -479,11 +472,9 @@ bool CUser::AddNetwork(CIRCNetwork *pNetwork) { } void CUser::RemoveNetwork(CIRCNetwork *pNetwork) { - for (vector::iterator it = m_vIRCNetworks.begin(); it != m_vIRCNetworks.end(); ++it) { - if (pNetwork == *it) { - m_vIRCNetworks.erase(it); - return; - } + auto it = std::find(m_vIRCNetworks.begin(), m_vIRCNetworks.end(), pNetwork); + if (it != m_vIRCNetworks.end()) { + m_vIRCNetworks.erase(it); } } @@ -503,8 +494,7 @@ bool CUser::DeleteNetwork(const CString& sNetwork) { } CIRCNetwork* CUser::FindNetwork(const CString& sNetwork) const { - for (vector::const_iterator it = m_vIRCNetworks.begin(); it != m_vIRCNetworks.end(); ++it) { - CIRCNetwork *pNetwork = *it; + for (CIRCNetwork* pNetwork : m_vIRCNetworks) { if (pNetwork->GetName().Equals(sNetwork)) { return pNetwork; } @@ -591,8 +581,8 @@ CString CUser::AddTimestamp(time_t tm, const CString& sStr) const { } void CUser::BounceAllClients() { - for (unsigned int a = 0; a < m_vClients.size(); a++) { - m_vClients[a]->BouncedOff(); + for (CClient* pClient : m_vClients) { + pClient->BouncedOff(); } m_vClients.clear(); @@ -609,40 +599,38 @@ void CUser::UserConnected(CClient* pClient) { } void CUser::UserDisconnected(CClient* pClient) { - for (unsigned int a = 0; a < m_vClients.size(); a++) { - if (m_vClients[a] == pClient) { - m_vClients.erase(m_vClients.begin() + a); - break; - } + auto it = std::find(m_vClients.begin(), m_vClients.end(), pClient); + if (it != m_vClients.end()) { + m_vClients.erase(it); } } void CUser::CloneNetworks(const CUser& User) { const vector& vNetworks = User.GetNetworks(); - for (vector::const_iterator it = vNetworks.begin(); it != vNetworks.end(); ++it) { - CIRCNetwork *pNetwork = FindNetwork((*it)->GetName()); + for (CIRCNetwork* pUserNetwork : vNetworks) { + CIRCNetwork *pNetwork = FindNetwork(pUserNetwork->GetName()); if (pNetwork) { - pNetwork->Clone(*(*it)); + pNetwork->Clone(*pUserNetwork); } else { - new CIRCNetwork(this, *(*it)); + new CIRCNetwork(this, *pUserNetwork); } } set ssDeleteNetworks; - for (vector::const_iterator it = m_vIRCNetworks.begin(); it != m_vIRCNetworks.end(); ++it) { - if (!(User.FindNetwork((*it)->GetName()))) { - ssDeleteNetworks.insert((*it)->GetName()); + for (CIRCNetwork* pNetwork : m_vIRCNetworks) { + if (!(User.FindNetwork(pNetwork->GetName()))) { + ssDeleteNetworks.insert(pNetwork->GetName()); } } - for (set::const_iterator it = ssDeleteNetworks.begin(); it != ssDeleteNetworks.end(); ++it) { + for (const CString& sNetwork : ssDeleteNetworks) { // The following will move all the clients to the user. // So the clients are not disconnected. The client could // have requested the rehash. Then when we do // client->PutStatus("Rehashing succeeded!") we would // crash if there was no client anymore. - const vector& vClients = FindNetwork(*it)->GetClients(); + const vector& vClients = FindNetwork(sNetwork)->GetClients(); while (vClients.begin() != vClients.end()) { CClient *pClient = vClients.front(); @@ -651,12 +639,11 @@ void CUser::CloneNetworks(const CUser& User) { pClient->SetNetwork(NULL); } - DeleteNetwork(*it); + DeleteNetwork(sNetwork); } } bool CUser::Clone(const CUser& User, CString& sErrorRet, bool bCloneNetworks) { - unsigned int a = 0; sErrorRet.clear(); if (!User.IsValid(sErrorRet, true)) { @@ -694,13 +681,11 @@ bool CUser::Clone(const CUser& User, CString& sErrorRet, bool bCloneNetworks) { // Allowed Hosts m_ssAllowedHosts.clear(); const set& ssHosts = User.GetAllowedHosts(); - for (set::const_iterator it = ssHosts.begin(); it != ssHosts.end(); ++it) { - AddAllowedHost(*it); + for (const CString& sHost : ssHosts) { + AddAllowedHost(sHost); } - for (a = 0; a < m_vClients.size(); a++) { - CClient* pSock = m_vClients[a]; - + for (CClient* pSock : m_vClients) { if (!IsHostAllowed(pSock->GetRemoteIP())) { pSock->PutStatusNotice("You are being disconnected because your IP is no longer allowed to connect to this user"); pSock->Close(); @@ -718,8 +703,8 @@ bool CUser::Clone(const CUser& User, CString& sErrorRet, bool bCloneNetworks) { // CTCP Replies m_mssCTCPReplies.clear(); const MCString& msReplies = User.GetCTCPReplies(); - for (MCString::const_iterator it = msReplies.begin(); it != msReplies.end(); ++it) { - AddCTCPReply(it->first, it->second); + for (const auto& it : msReplies) { + AddCTCPReply(it.first, it.second); } // !CTCP Replies @@ -741,9 +726,8 @@ bool CUser::Clone(const CUser& User, CString& sErrorRet, bool bCloneNetworks) { CModules& vCurMods = GetModules(); const CModules& vNewMods = User.GetModules(); - for (a = 0; a < vNewMods.size(); a++) { + for (CModule* pNewMod : vNewMods) { CString sModRet; - CModule* pNewMod = vNewMods[a]; CModule* pCurMod = vCurMods.FindModule(pNewMod->GetModName()); if (!pCurMod) { @@ -753,8 +737,7 @@ bool CUser::Clone(const CUser& User, CString& sErrorRet, bool bCloneNetworks) { } } - for (a = 0; a < vCurMods.size(); a++) { - CModule* pCurMod = vCurMods[a]; + for (CModule* pCurMod : vCurMods) { CModule* pNewMod = vNewMods.FindModule(pCurMod->GetModName()); if (!pNewMod) { @@ -762,8 +745,8 @@ bool CUser::Clone(const CUser& User, CString& sErrorRet, bool bCloneNetworks) { } } - for (set::iterator it = ssUnloadMods.begin(); it != ssUnloadMods.end(); ++it) { - vCurMods.UnloadModule(*it); + for (const CString& sMod : ssUnloadMods) { + vCurMods.UnloadModule(sMod); } // !Modules @@ -785,8 +768,8 @@ bool CUser::IsHostAllowed(const CString& sHostMask) const { return true; } - for (set::const_iterator a = m_ssAllowedHosts.begin(); a != m_ssAllowedHosts.end(); ++a) { - if (sHostMask.WildCmp(*a)) { + for (const CString& sHost : m_ssAllowedHosts) { + if (sHostMask.WildCmp(sHost)) { return true; } } @@ -893,15 +876,15 @@ CConfig CUser::ToConfig() const { // Allow Hosts if (!m_ssAllowedHosts.empty()) { - for (set::iterator it = m_ssAllowedHosts.begin(); it != m_ssAllowedHosts.end(); ++it) { - config.AddKeyValuePair("Allow", *it); + for (const CString& sHost : m_ssAllowedHosts) { + config.AddKeyValuePair("Allow", sHost); } } // CTCP Replies if (!m_mssCTCPReplies.empty()) { - for (MCString::const_iterator itb = m_mssCTCPReplies.begin(); itb != m_mssCTCPReplies.end(); ++itb) { - config.AddKeyValuePair("CTCPReply", itb->first.AsUpper() + " " + itb->second); + for (const auto& itb : m_mssCTCPReplies) { + config.AddKeyValuePair("CTCPReply", itb.first.AsUpper() + " " + itb.second); } } @@ -909,20 +892,19 @@ CConfig CUser::ToConfig() const { const CModules& Mods = GetModules(); if (!Mods.empty()) { - for (unsigned int a = 0; a < Mods.size(); a++) { - CString sArgs = Mods[a]->GetArgs(); + for (CModule* pMod : Mods) { + CString sArgs = pMod->GetArgs(); if (!sArgs.empty()) { sArgs = " " + sArgs; } - config.AddKeyValuePair("LoadModule", Mods[a]->GetModName() + sArgs); + config.AddKeyValuePair("LoadModule", pMod->GetModName() + sArgs); } } // Networks - for (unsigned int d = 0; d < m_vIRCNetworks.size(); d++) { - CIRCNetwork *pNetwork = m_vIRCNetworks[d]; + for (CIRCNetwork *pNetwork : m_vIRCNetworks) { config.AddSubConfig("Network", pNetwork->GetName(), pNetwork->ToConfig()); } @@ -963,8 +945,7 @@ CString CUser::GetLocalDCCIP() const { if (!GetDCCBindHost().empty()) return GetDCCBindHost(); - for (vector::const_iterator it = m_vIRCNetworks.begin(); it != m_vIRCNetworks.end(); ++it) { - CIRCNetwork *pNetwork = *it; + for (CIRCNetwork* pNetwork : m_vIRCNetworks) { CIRCSock* pIRCSock = pNetwork->GetIRCSock(); if (pIRCSock) { return pIRCSock->GetLocalIP(); @@ -979,9 +960,9 @@ CString CUser::GetLocalDCCIP() const { } bool CUser::PutUser(const CString& sLine, CClient* pClient, CClient* pSkipClient) { - for (unsigned int a = 0; a < m_vClients.size(); a++) { - if ((!pClient || pClient == m_vClients[a]) && pSkipClient != m_vClients[a]) { - m_vClients[a]->PutClient(sLine); + for (CClient* pEachClient : m_vClients) { + if ((!pClient || pClient == pEachClient) && pSkipClient != pEachClient) { + pEachClient->PutClient(sLine); if (pClient) { return true; @@ -995,8 +976,7 @@ bool CUser::PutUser(const CString& sLine, CClient* pClient, CClient* pSkipClient bool CUser::PutAllUser(const CString& sLine, CClient* pClient, CClient* pSkipClient) { PutUser(sLine, pClient, pSkipClient); - for (vector::iterator it = m_vIRCNetworks.begin(); it != m_vIRCNetworks.end(); ++it) { - CIRCNetwork* pNetwork = *it; + for (CIRCNetwork* pNetwork : m_vIRCNetworks) { if (pNetwork->PutUser(sLine, pClient, pSkipClient)) { return true; } @@ -1007,9 +987,9 @@ bool CUser::PutAllUser(const CString& sLine, CClient* pClient, CClient* pSkipCli bool CUser::PutStatus(const CString& sLine, CClient* pClient, CClient* pSkipClient) { vector vClients = GetAllClients(); - for (unsigned int a = 0; a < vClients.size(); a++) { - if ((!pClient || pClient == vClients[a]) && pSkipClient != vClients[a]) { - vClients[a]->PutStatus(sLine); + for (CClient* pEachClient : vClients) { + if ((!pClient || pClient == pEachClient) && pSkipClient != pEachClient) { + pEachClient->PutStatus(sLine); if (pClient) { return true; @@ -1022,9 +1002,9 @@ bool CUser::PutStatus(const CString& sLine, CClient* pClient, CClient* pSkipClie bool CUser::PutStatusNotice(const CString& sLine, CClient* pClient, CClient* pSkipClient) { vector vClients = GetAllClients(); - for (unsigned int a = 0; a < vClients.size(); a++) { - if ((!pClient || pClient == vClients[a]) && pSkipClient != vClients[a]) { - vClients[a]->PutStatusNotice(sLine); + for (CClient* pEachClient : vClients) { + if ((!pClient || pClient == pEachClient) && pSkipClient != pEachClient) { + pEachClient->PutStatusNotice(sLine); if (pClient) { return true; @@ -1036,9 +1016,9 @@ bool CUser::PutStatusNotice(const CString& sLine, CClient* pClient, CClient* pSk } bool CUser::PutModule(const CString& sModule, const CString& sLine, CClient* pClient, CClient* pSkipClient) { - for (unsigned int a = 0; a < m_vClients.size(); a++) { - if ((!pClient || pClient == m_vClients[a]) && pSkipClient != m_vClients[a]) { - m_vClients[a]->PutModule(sModule, sLine); + for (CClient* pEachClient : m_vClients) { + if ((!pClient || pClient == pEachClient) && pSkipClient != pEachClient) { + pEachClient->PutModule(sModule, sLine); if (pClient) { return true; @@ -1050,9 +1030,9 @@ bool CUser::PutModule(const CString& sModule, const CString& sLine, CClient* pCl } bool CUser::PutModNotice(const CString& sModule, const CString& sLine, CClient* pClient, CClient* pSkipClient) { - for (unsigned int a = 0; a < m_vClients.size(); a++) { - if ((!pClient || pClient == m_vClients[a]) && pSkipClient != m_vClients[a]) { - m_vClients[a]->PutModNotice(sModule, sLine); + for (CClient* pEachClient : m_vClients) { + if ((!pClient || pClient == pEachClient) && pSkipClient != pEachClient) { + pEachClient->PutModNotice(sModule, sLine); if (pClient) { return true; @@ -1072,8 +1052,8 @@ bool CUser::IsUserAttached() const { return true; } - for (vector::const_iterator i = m_vIRCNetworks.begin(); i != m_vIRCNetworks.end(); ++i) { - if ((*i)->IsUserAttached()) { + for (const CIRCNetwork* pNetwork : m_vIRCNetworks) { + if (pNetwork->IsUserAttached()) { return true; } } @@ -1100,9 +1080,9 @@ bool CUser::LoadModule(const CString& sModName, const CString& sArgs, const CStr // Do they have old NV? CFile fNVFile = CFile(GetUserPath() + "/moddata/" + sModName + "/.registry"); - for (vector::iterator it = m_vIRCNetworks.begin(); it != m_vIRCNetworks.end(); ++it) { + for (CIRCNetwork* pNetwork : m_vIRCNetworks) { if (fNVFile.Exists()) { - CString sNetworkModPath = (*it)->GetNetworkPath() + "/moddata/" + sModName; + CString sNetworkModPath = pNetwork->GetNetworkPath() + "/moddata/" + sModName; if (!CFile::Exists(sNetworkModPath)) { CDir::MakeDir(sNetworkModPath); } @@ -1110,7 +1090,7 @@ bool CUser::LoadModule(const CString& sModName, const CString& sArgs, const CStr fNVFile.Copy(sNetworkModPath + "/.registry"); } - bModRet = (*it)->GetModules().LoadModule(sModName, sArgs, CModInfo::NetworkModule, this, *it, sModRet); + bModRet = pNetwork->GetModules().LoadModule(sModName, sArgs, CModInfo::NetworkModule, this, pNetwork, sModRet); if (!bModRet) { break; } @@ -1197,14 +1177,14 @@ bool CUser::SetStatusPrefix(const CString& s) { vector CUser::GetAllClients() const { vector vClients; - for (unsigned int a = 0; a < m_vIRCNetworks.size(); a++) { - for (unsigned int b = 0; b < m_vIRCNetworks[a]->GetClients().size(); b++) { - vClients.push_back(m_vIRCNetworks[a]->GetClients()[b]); + for (CIRCNetwork* pNetwork : m_vIRCNetworks) { + for (CClient* pClient : pNetwork->GetClients()) { + vClients.push_back(pClient); } } - for (unsigned int a = 0; a < m_vClients.size(); a++) { - vClients.push_back(m_vClients[a]); + for (CClient* pClient : m_vClients) { + vClients.push_back(pClient); } return vClients;