Updated container converters to the new shiboken conversion scheme

Reviewed by Hugo Parente <hugo.lima@openbossa.org>
This commit is contained in:
Marcelo Lira 2009-11-03 05:23:00 -03:00 • committed by Hugo Lima
commit d2cd71313d
7 changed files with 35 additions and 29 deletions

View file

@ -1,4 +1,3 @@
template <> template <>
struct Converter<QBool> struct Converter<QBool>
{ {

View file

@ -1,11 +1,11 @@
template <typename qhash> template <typename qhash>
struct Converter_qhash struct Converter_qhash
{ {
static bool isConvertible(PyObject* pyObj) { static bool isConvertible(PyObject* pyobj) {
return PyDict_Check(pyObj); return PyDict_Check(pyobj);
} }
static PyObject* toPython(qhash hash) static PyObject* toPython(const qhash& hash)
{ {
PyObject* result = PyDict_New(); PyObject* result = PyDict_New();

View file

@ -1,15 +1,15 @@
template <typename qlist> template <typename qlist>
struct Converter_qlist struct Converter_qlist
{ {
static bool isConvertible(PyObject* pyObj) { static bool isConvertible(PyObject* pyobj) {
return PySequence_Check(pyObj); return PySequence_Check(pyobj);
} }
static PyObject* toPython(qlist holder) static PyObject* toPython(const qlist& list)
{ {
PyObject* result = PyList_New(holder.size()); PyObject* result = PyList_New(list.size());
for (int i = 0; i < holder.size(); i++) { for (int i = 0; i < list.size(); i++) {
PyList_SET_ITEM(result, i, Converter<typename qlist::value_type>::toPython(holder.at(i))); PyList_SET_ITEM(result, i, Converter<typename qlist::value_type>::toPython(list.at(i)));
} }
return result; return result;
} }

View file

@ -1,11 +1,11 @@
template <typename qmap> template <typename qmap>
struct Converter_qmap struct Converter_qmap
{ {
static bool isConvertible(PyObject* pyObj) { static bool isConvertible(PyObject* pyobj) {
return PyDict_Check(pyObj); return PyDict_Check(pyobj);
} }
static PyObject* toPython(qmap map) static PyObject* toPython(const qmap& map)
{ {
PyObject* result = PyDict_New(); PyObject* result = PyDict_New();

View file

@ -1,13 +1,13 @@
template <typename qpair> template <typename qpair>
struct Converter_qpair struct Converter_qpair
{ {
static bool isConvertible(PyObject* pyObj) { static bool isConvertible(PyObject* pyobj) {
return PySequence_Check(pyObj); return PySequence_Check(pyobj);
} }
static PyObject* toPython(qpair holder) static PyObject* toPython(const qpair& pair)
{ {
typename qpair::first_type first(holder.first); typename qpair::first_type first(pair.first);
typename qpair::second_type second(holder.second); typename qpair::second_type second(pair.second);
PyObject* tuple = PyTuple_New(2); PyObject* tuple = PyTuple_New(2);
PyTuple_SET_ITEM(tuple, 0, Converter<typename qpair::first_type>::toPython(first)); PyTuple_SET_ITEM(tuple, 0, Converter<typename qpair::first_type>::toPython(first));
PyTuple_SET_ITEM(tuple, 1, Converter<typename qpair::second_type>::toPython(second)); PyTuple_SET_ITEM(tuple, 1, Converter<typename qpair::second_type>::toPython(second));

View file

@ -1,14 +1,21 @@
inline bool Converter< QString >::isConvertible(PyObject* pyObj) inline bool Converter< QString >::isConvertible(PyObject* pyobj)
{ {
return PyObject_TypeCheck(pyObj, &PyQString_Type) || PyUnicode_Check(pyObj) || PyString_Check(pyObj); return PyUnicode_Check(pyobj) || PyString_Check(pyobj);
} }
inline PyObject* Converter< QString >::toPython(QString cppobj) inline PyObject* Converter< QString >::createWrapper(const QString* cppobj)
{ {
PyObject* pyobj; return PyBaseWrapper_New(&PyQString_Type, &PyQString_Type, cppobj);
void* holder = (void*) new QString(cppobj); }
pyobj = Shiboken::PyBaseWrapper_New(&PyQString_Type, &PyQString_Type, holder);
return pyobj; inline QString* Converter<QString >::copyCppObject(const QString& cppobj)
{
return new QString(cppobj);
}
inline PyObject* Converter< QString >::toPython(const QString& cppobj)
{
return Converter< QString >::createWrapper(new QString(cppobj));
} }
inline QString Converter< QString >::toCpp(PyObject* pyobj) inline QString Converter< QString >::toCpp(PyObject* pyobj)
@ -31,5 +38,5 @@ inline QString Converter< QString >::toCpp(PyObject* pyobj)
#endif #endif
} else if (PyString_Check(pyobj)) } else if (PyString_Check(pyobj))
return QString(Converter< char * >::toCpp(pyobj)); return QString(Converter< char * >::toCpp(pyobj));
return *((QString*) ((Shiboken::PyBaseWrapper*)pyobj)->cptr); return *Converter< QString* >::toCpp(pyobj);
} }

View file

@ -1,10 +1,10 @@
template <typename qvector> template <typename qvector>
struct Converter_qvector struct Converter_qvector
{ {
static bool isConvertible(PyObject* pyObj) { static bool isConvertible(PyObject* pyobj) {
return PySequence_Check(pyObj); return PySequence_Check(pyobj);
} }
static PyObject* toPython(qvector vector) static PyObject* toPython(const qvector& vector)
{ {
PyObject* result = PyList_New(vector.size()); PyObject* result = PyList_New(vector.size());
for (int i = 0; i < vector.size(); i++) { for (int i = 0; i < vector.size(); i++) {