aboutsummaryrefslogtreecommitdiffstats
path: root/libshiboken/conversions.h
diff options
context:
space:
mode:
authorRenato Filho <renato.filho@openbossa.org>2010-07-27 15:58:38 -0300
committerRenato Filho <renato.filho@openbossa.org>2010-07-27 17:42:39 -0300
commit419499bbaf4c6e4f55a0083d8ec65749440a38de (patch)
tree60493de8574fabe61f96b890f0495e9ca2522f84 /libshiboken/conversions.h
parent21460348ae4a73877ecbcc610d5ccd66a390d0c1 (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.h13
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<>