mirror of
https://github.com/znc/znc.git
synced 2026-08-07 09:22:55 +02:00
Use a set instead of a vector in CModule
CModule has two vectors: A list of timers and a list of sockets for this module. Since one shouldn't be able to add items multiple times it makes sense to use a set here instead. git-svn-id: https://znc.svn.sourceforge.net/svnroot/znc/trunk@1643 726aef4b-f618-498e-8847-2d620e286838
This commit is contained in:
+49
-31
@@ -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<CTimer*>::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<CTimer*>::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<CTimer*>::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<CTimer*>::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<CSocket*>::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<CSocket*>::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<CSocket*>::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<CSocket*>::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<CSocket*>::iterator it;
|
||||
for (it = m_sSockets.begin(); it != m_sSockets.end(); ++it) {
|
||||
CSocket* pSocket = *it;
|
||||
|
||||
Table.AddRow();
|
||||
Table.SetCell("Name", pSocket->GetSockName());
|
||||
|
||||
@@ -14,10 +14,8 @@
|
||||
#include "FileUtils.h"
|
||||
#include "Utils.h"
|
||||
#include <set>
|
||||
#include <vector>
|
||||
#include <queue>
|
||||
|
||||
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<CTimer*>::const_iterator BeginTimers() const { return m_vTimers.begin(); }
|
||||
vector<CTimer*>::const_iterator EndTimers() const { return m_vTimers.end(); }
|
||||
set<CTimer*>::const_iterator BeginTimers() const { return m_sTimers.begin(); }
|
||||
set<CTimer*>::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<CSocket*>::const_iterator BeginSockets() const { return m_vSockets.begin(); }
|
||||
vector<CSocket*>::const_iterator EndSockets() const { return m_vSockets.end(); }
|
||||
set<CSocket*>::const_iterator BeginSockets() const { return m_sSockets.begin(); }
|
||||
set<CSocket*>::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<CTimer*> m_vTimers;
|
||||
vector<CSocket*> m_vSockets;
|
||||
set<CTimer*> m_sTimers;
|
||||
set<CSocket*> m_sSockets;
|
||||
ModHandle m_pDLL;
|
||||
CSockManager* m_pManager;
|
||||
CUser* m_pUser;
|
||||
|
||||
+5
-5
@@ -121,7 +121,7 @@ public:
|
||||
|
||||
virtual void OnClientLogin()
|
||||
{
|
||||
vector<CSocket*>::const_iterator it;
|
||||
set<CSocket*>::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<CSocket*>::const_iterator it;
|
||||
set<CSocket*>::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<CSocket*>::const_iterator it;
|
||||
set<CSocket*>::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<CSocket*>::const_iterator it;
|
||||
set<CSocket*>::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<CSocket*>::const_iterator it;
|
||||
set<CSocket*>::const_iterator it;
|
||||
for (it = BeginSockets(); it != EndSockets(); it++) {
|
||||
Table.AddRow();
|
||||
Csock *pSock = *it;
|
||||
|
||||
Reference in New Issue
Block a user