diff options
author | Renato Filho <renato.filho@openbossa.org> | 2010-07-27 15:58:38 -0300 |
---|---|---|
committer | Renato Filho <renato.filho@openbossa.org> | 2010-07-27 17:42:39 -0300 |
commit | 419499bbaf4c6e4f55a0083d8ec65749440a38de (patch) | |
tree | 60493de8574fabe61f96b890f0495e9ca2522f84 /libshiboken/conversions.h | |
parent | 21460348ae4a73877ecbcc610d5ccd66a390d0c1 (diff) |
Create a new copy from object when convert from PyObject to const ref.
Reviewer: Marcelo Lira <marcelo.lira@openbossa.org>
Luciano Wolf <luciano.wolf@openbossa.org>
Diffstat (limited to 'libshiboken/conversions.h')
-rw-r--r-- | libshiboken/conversions.h | 13 |
1 files changed, 12 insertions, 1 deletions
diff --git a/libshiboken/conversions.h b/libshiboken/conversions.h index 4b6d8e388..4c3ebb5b8 100644 --- a/libshiboken/conversions.h +++ b/libshiboken/conversions.h @@ -157,10 +157,13 @@ struct Converter<T*> { if (Shiboken_TypeCheck(pyobj, T)) return (T*) getCppPointer(pyobj, SbkType<T>()); + else if (Converter<T>::isConvertible(pyobj)) return CppObjectCopier<T>::copy(Converter<T>::toCpp(pyobj)); + else if (pyobj == Py_None) return 0; + assert(false); return 0; } @@ -177,7 +180,15 @@ struct Converter<T&> static inline T& toCpp(PyObject* pyobj) { return *Converter<T*>::toCpp(pyobj); } }; -template <typename T> struct Converter<const T&> : Converter<T&> {}; +template <typename T> +struct Converter<const T&> : Converter<T&> +{ + static inline PyObject* toPython(const T& cppobj) + { + T* cpy = CppObjectCopier<T>::copy(cppobj); + return createWrapper<T>(cpy); + } +}; // Void pointer conversions. template<> |