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:
psychon
2009-10-05 20:44:54 +00:00
parent 3328e549d1
commit 9dd3883164
3 changed files with 61 additions and 44 deletions
+49 -31
View File
@@ -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());