aboutsummaryrefslogtreecommitdiffstats
path: root/libshiboken
diff options
context:
space:
mode:
authorMarcelo Lira <marcelo.lira@openbossa.org>2011-10-28 15:25:22 -0300
committerHugo Parente Lima <hugo.pl@gmail.com>2012-03-08 16:18:31 -0300
commit670cde3115f372b70768f14cf19d236f0d019f99 (patch)
tree7a1a6022ea58f92e6ea5cb8f03128c77332cfa4e /libshiboken
parent121373c06d6b99a6614c7577c17812dec2237895 (diff)
Register type converters by name.
This way they can be queried as the soon-to-be-deprecated TypeResolvers.
Diffstat (limited to 'libshiboken')
-rw-r--r--libshiboken/basewrapper.cpp10
-rw-r--r--libshiboken/sbkconverter.cpp17
-rw-r--r--libshiboken/sbkconverter.h6
3 files changed, 27 insertions, 6 deletions
diff --git a/libshiboken/basewrapper.cpp b/libshiboken/basewrapper.cpp
index aeca2bbfe..a35178ee5 100644
--- a/libshiboken/basewrapper.cpp
+++ b/libshiboken/basewrapper.cpp
@@ -1035,13 +1035,13 @@ PyObject* newObject(SbkObjectType* instanceType,
{
// Try to find the exact type of cptr.
if (!isExactType) {
- TypeResolver* tr = 0;
+ PyTypeObject* exactType = 0;
if (typeName) {
- tr = TypeResolver::get(typeName);
- if (tr)
- instanceType = reinterpret_cast<SbkObjectType*>(tr->pythonType());
+ exactType = Shiboken::Conversions::getPythonTypeObject(typeName);
+ if (exactType)
+ instanceType = reinterpret_cast<SbkObjectType*>(exactType);
}
- if (!tr)
+ if (!exactType)
instanceType = BindingManager::instance().resolveType(&cptr, instanceType);
}
diff --git a/libshiboken/sbkconverter.cpp b/libshiboken/sbkconverter.cpp
index 79a2f65fa..3a32bec50 100644
--- a/libshiboken/sbkconverter.cpp
+++ b/libshiboken/sbkconverter.cpp
@@ -283,12 +283,15 @@ bool isImplicitConversion(SbkObjectType* type, PythonToCppFunc toCppFunc)
void registerConverterName(SbkConverter* converter , const char* typeName)
{
ConvertersMap::iterator iter = converters.find(typeName);
- if (iter == converters.end())
+ if (iter == converters.end()) {
+ //SbkDbg() << "Registering " << typeName;
converters.insert(std::make_pair(typeName, converter));
+ }
}
SbkConverter* getConverter(const char* typeName)
{
+ //SbkDbg() << "Looking for converter for type " << typeName;
ConvertersMap::const_iterator it = converters.find(typeName);
if (it != converters.end())
return it->second;
@@ -423,4 +426,16 @@ bool convertibleDictTypes(SbkConverter* keyConverter, bool keyCheckExact, SbkCon
return true;
}
+PyTypeObject* getPythonTypeObject(SbkConverter* converter)
+{
+ if (converter)
+ return converter->pythonType;
+ return 0;
+}
+
+PyTypeObject* getPythonTypeObject(const char* typeName)
+{
+ return getPythonTypeObject(getConverter(typeName));
+}
+
} } // namespace Shiboken::Conversions
diff --git a/libshiboken/sbkconverter.h b/libshiboken/sbkconverter.h
index 463014fdc..f760e82f3 100644
--- a/libshiboken/sbkconverter.h
+++ b/libshiboken/sbkconverter.h
@@ -242,6 +242,12 @@ LIBSHIBOKEN_API bool checkDictTypes(PyTypeObject* keyType, PyTypeObject* valueTy
/// Returns true if a Python dictionary can be converted to a C++ hash or map.
LIBSHIBOKEN_API bool convertibleDictTypes(SbkConverter* keyConverter, bool keyCheckExact, SbkConverter* valueConverter, bool valueCheckExact, PyObject* pyIn);
+/// Returns the Python type object associated with the given \p converter.
+LIBSHIBOKEN_API PyTypeObject* getPythonTypeObject(SbkConverter* converter);
+
+/// Returns the Python type object for the given \p typeName.
+LIBSHIBOKEN_API PyTypeObject* getPythonTypeObject(const char* typeName);
+
#define SBK_PY_LONG_LONG_IDX 0
#define SBK_BOOL_IDX 1
#define SBK_CHAR_IDX 2