From 9d7c0d050bb4417b00a639b5216f3029d269eb7f Mon Sep 17 00:00:00 2001 From: Kyle Fuller Date: Tue, 28 Feb 2012 18:05:49 +0000 Subject: [PATCH] python: Allow iterating over CModules Closes #137 --- modules/modpython/module.h | 23 +++++++++++++++++++++++ modules/modpython/znc.py | 14 ++++++++++++++ 2 files changed, 37 insertions(+) diff --git a/modules/modpython/module.h b/modules/modpython/module.h index cc6c4ef5..bd3d5db5 100644 --- a/modules/modpython/module.h +++ b/modules/modpython/module.h @@ -234,6 +234,29 @@ public: } }; +class CModulesIter { +public: + CModulesIter(CModules *pModules) { + m_pModules = pModules; + m_it = pModules->begin(); + } + + void plusplus() { + ++m_it; + } + + const CModule* get() const { + return *m_it; + } + + bool is_end() const { + return m_pModules->end() == m_it; + } + + CModules *m_pModules; + CModules::const_iterator m_it; +}; + #if HAVE_VISIBILITY #pragma GCC visibility pop #endif diff --git a/modules/modpython/znc.py b/modules/modpython/znc.py index 1319e493..04b97411 100644 --- a/modules/modpython/znc.py +++ b/modules/modpython/znc.py @@ -647,3 +647,17 @@ def CreateWebSubPage(name, title='', params=dict(), admin=False): CUser.GetNetworks = CUser.GetNetworks_ CIRCNetwork.GetChans = CIRCNetwork.GetChans_ CChan.GetNicks = CChan.GetNicks_ + + +class ModulesIter(collections.Iterator): + def __init__(self, cmod): + self._cmod = cmod + + def __next__(self): + if self._cmod.is_end(): + raise StopIteration + + module = self._cmod.get() + self._cmod.plusplus() + return module +CModules.__iter__ = lambda cmod: ModulesIter(CModulesIter(cmod))