From d1ec4ab5b10d8d2ef125af08bccf467076791815 Mon Sep 17 00:00:00 2001 From: Hugo Parente Lima Date: Wed, 9 Jun 2010 16:43:24 -0300 Subject: Automatically register all primitive types on TypeResover. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Reviewer: Renato Araújo Luciano Wolf --- libshiboken/basewrapper.cpp | 4 +--- libshiboken/typeresolver.cpp | 20 ++++++++------------ libshiboken/typeresolver.h | 6 ++++++ 3 files changed, 15 insertions(+), 15 deletions(-) (limited to 'libshiboken') 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(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"); - TypeResolver::createValueTypeResolver("float"); - TypeResolver::createValueTypeResolver("bool"); - TypeResolver::createValueTypeResolver("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::toPython(*reinterpret_cast(cptr)); } +/** +* \internal This function is not part of the public API. +* Initialize the TypeResource internal cache. +*/ +void initTypeResolver(); + class LIBSHIBOKEN_API TypeResolver { public: -- cgit v1.2.3