diff options
author | Gordon Sim <gsim@apache.org> | 2015-12-02 19:38:15 +0000 |
---|---|---|
committer | Gordon Sim <gsim@apache.org> | 2015-12-02 19:38:15 +0000 |
commit | 92325428ef23b9c942e9069bdb9259bdcf5d71b8 (patch) | |
tree | 95da6c22d81030d3aaed0e373f30e16170cf37a5 | |
parent | 9a3f854e44b91d743303205dfe4dc9deb8609f5f (diff) | |
download | qpid-python-92325428ef23b9c942e9069bdb9259bdcf5d71b8.tar.gz |
QPID-6858: update swig type mapping to compile with both python 2 and 3
git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk@1717670 13f79535-47bb-0310-9956-ffa450edef68
-rw-r--r-- | qpid/cpp/include/qpid/swig_python_typemaps.i | 34 |
1 files changed, 19 insertions, 15 deletions
diff --git a/qpid/cpp/include/qpid/swig_python_typemaps.i b/qpid/cpp/include/qpid/swig_python_typemaps.i index 52b0d978dc..a27782d888 100644 --- a/qpid/cpp/include/qpid/swig_python_typemaps.i +++ b/qpid/cpp/include/qpid/swig_python_typemaps.i @@ -50,7 +50,11 @@ typedef int Py_ssize_t; #define PY_SSIZE_T_MAX INT_MAX #define PY_SSIZE_T_MIN INT_MIN #endif - +#if PY_VERSION_HEX < 0x03000000 +#define PyLong_AS_LONG PyInt_AS_LONG +#else +#define PyInt_AsUnsignedLongMask PyLong_AsUnsignedLongMask +#endif PyObject* MapToPy(const qpid::types::Variant::Map*); PyObject* ListToPy(const qpid::types::Variant::List*); @@ -59,11 +63,11 @@ typedef int Py_ssize_t; void PyToList(PyObject*, qpid::types::Variant::List*); qpid::types::Variant PyToVariant(PyObject* value) { - if (PyBool_Check(value)) return qpid::types::Variant(bool(PyInt_AS_LONG(value) ? true : false)); + if (PyBool_Check(value)) return qpid::types::Variant(bool(PyLong_AS_LONG(value) ? true : false)); if (PyFloat_Check(value)) return qpid::types::Variant(PyFloat_AS_DOUBLE(value)); - if (PyInt_Check(value)) return qpid::types::Variant(int64_t(PyInt_AS_LONG(value))); if (PyLong_Check(value)) return qpid::types::Variant(int64_t(PyLong_AsLongLong(value))); - if (PyString_Check(value)) return qpid::types::Variant(std::string(PyString_AS_STRING(value))); + if (PyInt_Check(value)) return qpid::types::Variant(int64_t(PyLong_AS_LONG(value))); + if (PyString_Check(value)) return qpid::types::Variant(std::string(PyBytes_AS_STRING(value))); if (PyUnicode_Check(value)) { qpid::types::Variant v(std::string(PyUnicode_AS_DATA(value))); v.setEncoding("utf8"); @@ -128,7 +132,7 @@ typedef int Py_ssize_t; if (v->getEncoding() == "utf8") result = PyUnicode_DecodeUTF8(val.c_str(), val.size(), NULL); else - result = PyString_FromStringAndSize(val.c_str(), val.size()); + result = PyBytes_FromStringAndSize(val.c_str(), val.size()); break; } case qpid::types::VAR_MAP : { @@ -161,7 +165,7 @@ typedef int Py_ssize_t; PyObject* pyval = VariantToPy(&(iter->second)); if (pyval == 0) return 0; - PyDict_SetItem(result, PyString_FromStringAndSize(key.c_str(), key.size()), pyval); + PyDict_SetItem(result, PyBytes_FromStringAndSize(key.c_str(), key.size()), pyval); } return result; } @@ -189,7 +193,7 @@ typedef int Py_ssize_t; PyObject* pArgs = PyTuple_New(0); PyObject* pKw = PyDict_New(); - PyObject* pData = PyString_FromStringAndSize( + PyObject* pData = PyBytes_FromStringAndSize( (const char*)(uuid->data()), 16); PyDict_SetItemString(pKw, "bytes", pData); @@ -210,7 +214,7 @@ typedef int Py_ssize_t; PyObject *key; PyObject *val; while (PyDict_Next(obj, &iter, &key, &val)) - (*map)[std::string(PyString_AS_STRING(key))] = PyToVariant(val); + (*map)[std::string(PyBytes_AS_STRING(key))] = PyToVariant(val); } void PyToList(PyObject* obj, qpid::types::Variant::List* list) { @@ -242,10 +246,10 @@ typedef int Py_ssize_t; /* unsigned16 Convert from Python --> C */ %typemap(in) uint16_t { - if (PyInt_Check($input)) { - $1 = (uint16_t) PyInt_AsUnsignedLongMask($input); - } else if (PyLong_Check($input)) { + if (PyLong_Check($input)) { $1 = (uint16_t) PyLong_AsUnsignedLong($input); + } else if (PyInt_Check($input)) { + $1 = (uint16_t) PyInt_AsUnsignedLongMask($input); } else { SWIG_exception_fail(SWIG_ValueError, "unknown integer type"); } @@ -259,10 +263,10 @@ typedef int Py_ssize_t; /* signed32 Convert from Python --> C */ %typemap(in) int32_t { - if (PyInt_Check($input)) { - $1 = (int32_t) PyInt_AsLong($input); - } else if (PyLong_Check($input)) { + if (PyLong_Check($input)) { $1 = (int32_t) PyLong_AsLong($input); + } else if (PyInt_Check($input)) { + $1 = (int32_t) PyInt_AsLong($input); } else { SWIG_exception_fail(SWIG_ValueError, "unknown integer type"); } @@ -280,7 +284,7 @@ typedef int Py_ssize_t; if (PyLong_Check($input)) { $1 = (uint64_t)PyLong_AsUnsignedLongLong($input); } else if (PyInt_Check($input)) { - $1 = (uint64_t)PyInt_AsUnsignedLongLongMask($input); + $1 = (uint64_t)PyLong_AS_LONG($input); } else %#endif { |