diff --git a/Modules.cpp b/Modules.cpp index 40d4d9fb..967a93df 100644 --- a/Modules.cpp +++ b/Modules.cpp @@ -235,12 +235,12 @@ CModule::CModule(ModHandle pDLL, const CString& sModName, const CString& sDataDi } CModule::~CModule() { - while (m_vTimers.size()) { - RemTimer(m_vTimers[0]->GetName()); + while (!m_sTimers.empty()) { + RemTimer(*m_sTimers.begin()); } - while (m_vSockets.size()) { - RemSocket(m_vSockets[0]); + while (!m_sSockets.empty()) { + RemSocket(*m_sSockets.begin()); } SaveRegistry(); @@ -310,8 +310,11 @@ bool CModule::AddTimer(CTimer* pTimer) { return false; } + if (!m_sTimers.insert(pTimer).second) + // Was already added + return true; + m_pManager->AddCron(pTimer); - m_vTimers.push_back(pTimer); return true; } @@ -322,12 +325,19 @@ bool CModule::AddTimer(FPTimer_t pFBCallback, const CString& sLabel, u_int uInte return AddTimer(pTimer); } +bool CModule::RemTimer(CTimer* pTimer) { + if (m_sTimers.erase(pTimer) == 0) + return false; + return true; +} + bool CModule::RemTimer(const CString& sLabel) { - for (unsigned int a = 0; a < m_vTimers.size(); a++) { - CTimer* pTimer = m_vTimers[a]; + set::iterator it; + for (it = m_sTimers.begin(); it != m_sTimers.end(); ++it) { + CTimer* pTimer = *it; if (pTimer->GetName().Equals(sLabel)) { - m_vTimers.erase(m_vTimers.begin() +a); + m_sTimers.erase(it); m_pManager->DelCronByAddr(pTimer); return true; } @@ -337,9 +347,10 @@ bool CModule::RemTimer(const CString& sLabel) { } bool CModule::UnlinkTimer(CTimer* pTimer) { - for (unsigned int a = 0; a < m_vTimers.size(); a++) { - if (pTimer == m_vTimers[a]) { - m_vTimers.erase(m_vTimers.begin() +a); + set::iterator it; + for (it = m_sTimers.begin(); it != m_sTimers.end(); ++it) { + if (pTimer == *it) { + m_sTimers.erase(it); return true; } } @@ -348,8 +359,9 @@ bool CModule::UnlinkTimer(CTimer* pTimer) { } CTimer* CModule::FindTimer(const CString& sLabel) { - for (unsigned int a = 0; a < m_vTimers.size(); a++) { - CTimer* pTimer = m_vTimers[a]; + set::iterator it; + for (it = m_sTimers.begin(); it != m_sTimers.end(); ++it) { + CTimer* pTimer = *it; if (pTimer->GetName().Equals(sLabel)) { return pTimer; } @@ -359,7 +371,7 @@ CTimer* CModule::FindTimer(const CString& sLabel) { } void CModule::ListTimers() { - if (!m_vTimers.size()) { + if (m_sTimers.empty()) { PutModule("You have no timers running."); return; } @@ -370,8 +382,9 @@ void CModule::ListTimers() { Table.AddColumn("Cycles"); Table.AddColumn("Description"); - for (unsigned int a = 0; a < m_vTimers.size(); a++) { - CTimer* pTimer = (CTimer*) m_vTimers[a]; + set::iterator it; + for (it = m_sTimers.begin(); it != m_sTimers.end(); ++it) { + CTimer* pTimer = *it; unsigned int uCycles = pTimer->GetCyclesLeft(); Table.AddRow(); @@ -389,14 +402,15 @@ bool CModule::AddSocket(CSocket* pSocket) { return false; } - m_vSockets.push_back(pSocket); + m_sSockets.insert(pSocket); return true; } bool CModule::RemSocket(CSocket* pSocket) { - for (unsigned int a = 0; a < m_vSockets.size(); a++) { - if (m_vSockets[a] == pSocket) { - m_vSockets.erase(m_vSockets.begin() +a); + 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; } @@ -406,11 +420,12 @@ bool CModule::RemSocket(CSocket* pSocket) { } bool CModule::RemSocket(const CString& sSockName) { - for (unsigned int a = 0; a < m_vSockets.size(); a++) { - CSocket* pSocket = m_vSockets[a]; + set::iterator it; + for (it = m_sSockets.begin(); it != m_sSockets.end(); ++it) { + CSocket* pSocket = *it; if (pSocket->GetSockName().Equals(sSockName)) { - m_vSockets.erase(m_vSockets.begin() +a); + m_sSockets.erase(it); m_pManager->DelSockByAddr(pSocket); return true; } @@ -420,9 +435,10 @@ bool CModule::RemSocket(const CString& sSockName) { } bool CModule::UnlinkSocket(CSocket* pSocket) { - for (unsigned int a = 0; a < m_vSockets.size(); a++) { - if (pSocket == m_vSockets[a]) { - m_vSockets.erase(m_vSockets.begin() +a); + set::iterator it; + for (it = m_sSockets.begin(); it != m_sSockets.end(); ++it) { + if (pSocket == *it) { + m_sSockets.erase(it); return true; } } @@ -431,8 +447,9 @@ bool CModule::UnlinkSocket(CSocket* pSocket) { } CSocket* CModule::FindSocket(const CString& sSockName) { - for (unsigned int a = 0; a < m_vSockets.size(); a++) { - CSocket* pSocket = m_vSockets[a]; + set::iterator it; + for (it = m_sSockets.begin(); it != m_sSockets.end(); ++it) { + CSocket* pSocket = *it; if (pSocket->GetSockName().Equals(sSockName)) { return pSocket; } @@ -442,7 +459,7 @@ CSocket* CModule::FindSocket(const CString& sSockName) { } void CModule::ListSockets() { - if (!m_vSockets.size()) { + if (m_sSockets.empty()) { PutModule("You have no open sockets."); return; } @@ -455,8 +472,9 @@ void CModule::ListSockets() { Table.AddColumn("RemoteIP"); Table.AddColumn("RemotePort"); - for (unsigned int a = 0; a < m_vSockets.size(); a++) { - CSocket* pSocket = (CSocket*) m_vSockets[a]; + set::iterator it; + for (it = m_sSockets.begin(); it != m_sSockets.end(); ++it) { + CSocket* pSocket = *it; Table.AddRow(); Table.SetCell("Name", pSocket->GetSockName()); diff --git a/Modules.h b/Modules.h index 344d5bac..e6780dae 100644 --- a/Modules.h +++ b/Modules.h @@ -14,10 +14,8 @@ #include "FileUtils.h" #include "Utils.h" #include -#include #include -using std::vector; using std::set; // Forward Declarations @@ -317,11 +315,12 @@ public: // Timer stuff bool AddTimer(CTimer* pTimer); bool AddTimer(FPTimer_t pFBCallback, const CString& sLabel, u_int uInterval, u_int uCycles = 0, const CString& sDescription = ""); + bool RemTimer(CTimer* pTimer); bool RemTimer(const CString& sLabel); bool UnlinkTimer(CTimer* pTimer); CTimer* FindTimer(const CString& sLabel); - vector::const_iterator BeginTimers() const { return m_vTimers.begin(); } - vector::const_iterator EndTimers() const { return m_vTimers.end(); } + set::const_iterator BeginTimers() const { return m_sTimers.begin(); } + set::const_iterator EndTimers() const { return m_sTimers.end(); } virtual void ListTimers(); // !Timer stuff @@ -331,8 +330,8 @@ public: bool RemSocket(const CString& sSockName); bool UnlinkSocket(CSocket* pSocket); CSocket* FindSocket(const CString& sSockName); - vector::const_iterator BeginSockets() const { return m_vSockets.begin(); } - vector::const_iterator EndSockets() const { return m_vSockets.end(); } + set::const_iterator BeginSockets() const { return m_sSockets.begin(); } + set::const_iterator EndSockets() const { return m_sSockets.end(); } virtual void ListSockets(); // !Socket stuff @@ -370,8 +369,8 @@ protected: bool m_bFake; bool m_bGlobal; CString m_sDescription; - vector m_vTimers; - vector m_vSockets; + set m_sTimers; + set m_sSockets; ModHandle m_pDLL; CSockManager* m_pManager; CUser* m_pUser; diff --git a/modules/schat.cpp b/modules/schat.cpp index b6ed4665..170495ed 100644 --- a/modules/schat.cpp +++ b/modules/schat.cpp @@ -121,7 +121,7 @@ public: virtual void OnClientLogin() { - vector::const_iterator it; + set::const_iterator it; for (it = BeginSockets(); it != EndSockets(); it++) { CSChatSock *p = (CSChatSock*) *it; @@ -154,7 +154,7 @@ public: if (sCom.Equals("chat") && !sArgs.empty()) { CString sNick = "(s)" + sArgs; - vector::const_iterator it; + set::const_iterator it; for (it = BeginSockets(); it != EndSockets(); it++) { CSChatSock *pSock = (CSChatSock*) *it; @@ -193,7 +193,7 @@ public: Table.AddColumn("Status"); Table.AddColumn("Cipher"); - vector::const_iterator it; + set::const_iterator it; for (it = BeginSockets(); it != EndSockets(); it++) { Table.AddRow(); @@ -230,7 +230,7 @@ public: if (!sArgs.Equals("(s)", false, 3)) sArgs = "(s)" + sArgs; - vector::const_iterator it; + set::const_iterator it; for (it = BeginSockets(); it != EndSockets(); it++) { CSChatSock *pSock = (CSChatSock*) *it; @@ -249,7 +249,7 @@ public: Table.AddColumn("Type"); Table.AddColumn("Cipher"); - vector::const_iterator it; + set::const_iterator it; for (it = BeginSockets(); it != EndSockets(); it++) { Table.AddRow(); Csock *pSock = *it;