diff options
author | Hugo Parente Lima <hugo.lima@openbossa.org> | 2010-06-09 16:43:24 -0300 |
---|---|---|
committer | Hugo Parente Lima <hugo.lima@openbossa.org> | 2010-06-10 15:33:42 -0300 |
commit | d1ec4ab5b10d8d2ef125af08bccf467076791815 (patch) | |
tree | 7205e406a614cb4d9c38e93e3a180ae0e4e40c58 /libshiboken | |
parent | 4e58a45ea523118bef5e746edb7383c799d65a27 (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.cpp | 4 | ||||
-rw-r--r-- | libshiboken/typeresolver.cpp | 20 | ||||
-rw-r--r-- | libshiboken/typeresolver.h | 6 |
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: |