aboutsummaryrefslogtreecommitdiffstats
path: root/libshiboken
diff options
context:
space:
mode:
authorHugo Parente Lima <hugo.pl@gmail.com>2010-10-22 19:07:01 -0200
committerHugo Parente Lima <hugo.pl@gmail.com>2012-03-08 16:07:23 -0300
commit8eb8daf1a850759c907e2b2b5ed43fd70af5a665 (patch)
treed3207ccbf3e3a63db0a53c02a66076b0148a09f9 /libshiboken
parent498a649e565711a208f2efe793d4cba2374ea1dd (diff)
Added BindingManager::getAllPyObjects method.
This functions returns all PyObjects under the umbrella of BindingManager. Reviewer: Luciano Wolf <luciano.wolf@openbossa.org> Renato Araújo <renato.filho@openbossa.org>
Diffstat (limited to 'libshiboken')
-rw-r--r--libshiboken/bindingmanager.cpp20
-rw-r--r--libshiboken/bindingmanager.h2
2 files changed, 16 insertions, 6 deletions
diff --git a/libshiboken/bindingmanager.cpp b/libshiboken/bindingmanager.cpp
index 93e61b645..38dc4eb87 100644
--- a/libshiboken/bindingmanager.cpp
+++ b/libshiboken/bindingmanager.cpp
@@ -144,15 +144,12 @@ BindingManager::~BindingManager()
#ifndef NDEBUG
showWrapperMap(m_d->wrapperMapper);
#endif
- assert(m_d->wrapperMapper.size() == 0);
-
/* Cleanup hanging references. We just invalidate them as when
* the BindingManager is being destroyed the interpreter is alredy
* shutting down. */
- WrapperMap::iterator iter = m_d->wrapperMapper.begin();
- for (;iter != m_d->wrapperMapper.end(); ++iter)
- invalidateWrapper(iter->second);
-
+ while (!m_d->wrapperMapper.empty())
+ invalidateWrapper(m_d->wrapperMapper.begin()->second);
+ assert(m_d->wrapperMapper.size() == 0);
delete m_d;
}
@@ -346,5 +343,16 @@ SbkBaseWrapperType* BindingManager::resolveType(void* cptr, Shiboken::SbkBaseWra
return identifiedType ? identifiedType : type;
}
+std::set< PyObject* > BindingManager::getAllPyObjects()
+{
+ std::set<PyObject*> pyObjects;
+ const WrapperMap& wrappersMap = m_d->wrapperMapper;
+ WrapperMap::const_iterator it = wrappersMap.begin();
+ for (; it != wrappersMap.end(); ++it)
+ pyObjects.insert(it->second);
+
+ return pyObjects;
+}
+
} // namespace Shiboken
diff --git a/libshiboken/bindingmanager.h b/libshiboken/bindingmanager.h
index cec4a78ff..d7cec27b9 100644
--- a/libshiboken/bindingmanager.h
+++ b/libshiboken/bindingmanager.h
@@ -24,6 +24,7 @@
#define BINDINGMANAGER_H
#include <Python.h>
+#include <set>
#include "shibokenmacros.h"
namespace Shiboken
@@ -61,6 +62,7 @@ public:
/// Called by wrapper destructor
void destroyWrapper(const void* cptr);
void destroyWrapper(SbkBaseWrapper* wrapper);
+ std::set<PyObject*> getAllPyObjects();
private:
~BindingManager();
// disable copy