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))