aboutsummaryrefslogtreecommitdiffstats
path: root/libshiboken
diff options
context:
space:
mode:
authorHugo Parente Lima <hugo.lima@openbossa.org>2010-06-09 16:43:24 -0300
committerHugo Parente Lima <hugo.lima@openbossa.org>2010-06-10 15:33:42 -0300
commitd1ec4ab5b10d8d2ef125af08bccf467076791815 (patch)
tree7205e406a614cb4d9c38e93e3a180ae0e4e40c58 /libshiboken
parent4e58a45ea523118bef5e746edb7383c799d65a27 (diff)
Automatically register all primitive types on TypeResover.
Reviewer: Renato Araújo <renato.araujo@openbossa.org> Luciano Wolf <luciano.wolf@openbossa.org>
Diffstat (limited to 'libshiboken')
-rw-r--r--libshiboken/basewrapper.cpp4
-rw-r--r--libshiboken/typeresolver.cpp20
-rw-r--r--libshiboken/typeresolver.h6
3 files changed, 15 insertions, 15 deletions
diff --git a/libshiboken/basewrapper.cpp b/libshiboken/basewrapper.cpp
index 9c2abe1f8..2b758d7c6 100644
--- a/libshiboken/basewrapper.cpp
+++ b/libshiboken/basewrapper.cpp
@@ -523,15 +523,13 @@ PyObject* SbkBaseWrapperType_TpNew(PyTypeObject* metatype, PyObject* args, PyObj
return reinterpret_cast<PyObject*>(newType);
}
-
-
-
void initShiboken()
{
static bool shibokenAlreadInitialised = false;
if (shibokenAlreadInitialised)
return;
+ initTypeResolver();
#ifdef WITH_THREAD
PyEval_InitThreads();
#endif
diff --git a/libshiboken/typeresolver.cpp b/libshiboken/typeresolver.cpp
index 72c6c8d4c..a88634a17 100644
--- a/libshiboken/typeresolver.cpp
+++ b/libshiboken/typeresolver.cpp
@@ -59,20 +59,16 @@ static void deinitTypeResolver()
typeResolverMap.clear();
}
+void Shiboken::initTypeResolver()
+{
+ assert(typeResolverMap.empty());
+ typeResolverMap.set_empty_key("");
+ typeResolverMap.set_deleted_key("?");
+ std::atexit(deinitTypeResolver);
+}
+
static void registerTypeResolver(TypeResolver* resolver)
{
- static bool initied = false;
- if (!initied) {
- assert(typeResolverMap.empty());
- typeResolverMap.set_empty_key("");
- typeResolverMap.set_deleted_key("?");
- initied = true;
- std::atexit(deinitTypeResolver);
- TypeResolver::createValueTypeResolver<double>("double");
- TypeResolver::createValueTypeResolver<float>("float");
- TypeResolver::createValueTypeResolver<bool>("bool");
- TypeResolver::createValueTypeResolver<int>("int");
- }
assert(typeResolverMap.find(resolver->typeName()) == typeResolverMap.end());
typeResolverMap[resolver->typeName()] = resolver;
}
diff --git a/libshiboken/typeresolver.h b/libshiboken/typeresolver.h
index 0a23634c5..1f4c46424 100644
--- a/libshiboken/typeresolver.h
+++ b/libshiboken/typeresolver.h
@@ -68,6 +68,12 @@ inline PyObject* objectTypeToPython(void* cptr)
return Shiboken::Converter<T*>::toPython(*reinterpret_cast<T**>(cptr));
}
+/**
+* \internal This function is not part of the public API.
+* Initialize the TypeResource internal cache.
+*/
+void initTypeResolver();
+
class LIBSHIBOKEN_API TypeResolver
{
public: