From fbd1c40654d4717d71ad6335978e97cd214c4c4c Mon Sep 17 00:00:00 2001 From: baldurk Date: Thu, 31 Aug 2017 18:31:56 +0100 Subject: [PATCH] Add python typemap handling for rdctype::pair --- qrenderdoc/Code/pyrenderdoc/pyconversion.h | 40 +++++++++++++++++++--- qrenderdoc/Code/pyrenderdoc/renderdoc.i | 1 + 2 files changed, 37 insertions(+), 4 deletions(-) diff --git a/qrenderdoc/Code/pyrenderdoc/pyconversion.h b/qrenderdoc/Code/pyrenderdoc/pyconversion.h index 1fcbab45a..a727101bf 100644 --- a/qrenderdoc/Code/pyrenderdoc/pyconversion.h +++ b/qrenderdoc/Code/pyrenderdoc/pyconversion.h @@ -267,7 +267,7 @@ struct TypeConversion template struct TypeConversion, false> { - static int ConvertFromPy(PyObject *in, rdctype::pair &out) + static int ConvertFromPy(PyObject *in, rdctype::pair &out, int *failIdx) { if(!PyTuple_Check(in)) return SWIG_TypeError; @@ -278,21 +278,48 @@ struct TypeConversion, false> return SWIG_TypeError; int ret = TypeConversion::ConvertFromPy(PyTuple_GetItem(in, 0), out.first); - if(SWIG_IsOK(ret)) - ret = TypeConversion::ConvertFromPy(PyTuple_GetItem(in, 1), out.second); + + if(!SWIG_IsOK(ret)) + { + if(failIdx) + *failIdx = 0; + return ret; + } + + ret = TypeConversion::ConvertFromPy(PyTuple_GetItem(in, 1), out.second); + + if(!SWIG_IsOK(ret)) + { + if(failIdx) + *failIdx = 1; + return ret; + } return ret; } - static PyObject *ConvertToPy(PyObject *self, const rdctype::pair &in) + static int ConvertFromPy(PyObject *in, rdctype::pair &out) + { + return ConvertFromPy(in, out, NULL); + } + + static PyObject *ConvertToPy(PyObject *self, const rdctype::pair &in, int *failIdx) { PyObject *first = TypeConversion::ConvertToPy(self, in.first); if(!first) + { + if(failIdx) + *failIdx = 0; return NULL; + } PyObject *second = TypeConversion::ConvertToPy(self, in.second); if(!second) + { + if(failIdx) + *failIdx = 1; return NULL; + } PyObject *ret = PyTuple_New(2); if(!ret) @@ -303,6 +330,11 @@ struct TypeConversion, false> return ret; } + + static PyObject *ConvertToPy(PyObject *self, const rdctype::pair &in) + { + return ConvertToPy(self, in, NULL); + } }; // specialisation for array diff --git a/qrenderdoc/Code/pyrenderdoc/renderdoc.i b/qrenderdoc/Code/pyrenderdoc/renderdoc.i index 0bfee7103..6d08f4634 100644 --- a/qrenderdoc/Code/pyrenderdoc/renderdoc.i +++ b/qrenderdoc/Code/pyrenderdoc/renderdoc.i @@ -53,6 +53,7 @@ SIMPLE_TYPEMAPS(rdctype::str) CONTAINER_TYPEMAPS(rdctype::array) +CONTAINER_TYPEMAPS(rdctype::pair) %typemap(in, fragment="pyconvert") std::function { PyObject *func = $input;