move tuple helper to its own file, and allow the user to redefine fragments through the fragments.i file
git-svn-id: https://swig.svn.sourceforge.net/svnroot/swig/trunk@6234 626c5289-ae23-0410-ae9c-e8d60b6d4f22
This commit is contained in:
parent
f5de255d60
commit
4e4d8679f1
5 changed files with 60 additions and 29 deletions
|
|
@ -10,7 +10,7 @@
|
||||||
* some way.
|
* some way.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
%include "fragments.i"
|
%include "pytuplehlp.swg"
|
||||||
|
|
||||||
/* %cstring_input_binary(TYPEMAP, SIZE)
|
/* %cstring_input_binary(TYPEMAP, SIZE)
|
||||||
*
|
*
|
||||||
|
|
|
||||||
|
|
@ -1,28 +1,23 @@
|
||||||
/* Helper function to return tuples */
|
/*
|
||||||
|
|
||||||
|
Create a file with this name, 'fragments.i', in your working
|
||||||
|
directory and add all the %fragments you want to take precedence
|
||||||
|
over the ones defined by default by swig.
|
||||||
|
|
||||||
|
For example, if you add:
|
||||||
|
|
||||||
|
%fragment(SWIG_AsVal_frag(int),"header") {
|
||||||
|
SWIGSTATICINLINE(int)
|
||||||
|
SWIG_AsVal(int)(PyObject *obj, int *val)
|
||||||
|
{
|
||||||
|
<your code here>;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
this will replace the code used to retreive an integer value for all
|
||||||
|
the typemaps that need it, including:
|
||||||
|
|
||||||
|
int, std::vector<int>, std::list<std::pair<int,int> >, etc.
|
||||||
|
|
||||||
%fragment("t_output_helper","header") %{
|
|
||||||
static PyObject* t_output_helper(PyObject* target, PyObject* o) {
|
|
||||||
PyObject* o2;
|
|
||||||
PyObject* o3;
|
|
||||||
|
|
||||||
if (!target) {
|
*/
|
||||||
target = o;
|
|
||||||
} else if (target == Py_None) {
|
|
||||||
Py_DECREF(Py_None);
|
|
||||||
target = o;
|
|
||||||
} else {
|
|
||||||
o2 = target;
|
|
||||||
target = PyTuple_New(1);
|
|
||||||
PyTuple_SetItem(target, 0, o2);
|
|
||||||
|
|
||||||
o3 = PyTuple_New(1);
|
|
||||||
PyTuple_SetItem(o3, 0, o);
|
|
||||||
|
|
||||||
o2 = target;
|
|
||||||
target = PySequence_Concat(o2, o3);
|
|
||||||
Py_DECREF(o2);
|
|
||||||
Py_DECREF(o3);
|
|
||||||
}
|
|
||||||
return target;
|
|
||||||
}
|
|
||||||
%}
|
|
||||||
|
|
|
||||||
|
|
@ -123,7 +123,7 @@ output values.
|
||||||
// Author: Robin Dunn
|
// Author: Robin Dunn
|
||||||
//----------------------------------------------------------------------
|
//----------------------------------------------------------------------
|
||||||
|
|
||||||
%include fragments.i
|
%include pytuplehlp.swg
|
||||||
|
|
||||||
%define _PYVAL_OUTPUT_TYPEMAP(from_meth, from_frag, Type)
|
%define _PYVAL_OUTPUT_TYPEMAP(from_meth, from_frag, Type)
|
||||||
%typemap(in,numinputs=0) Type *OUTPUT ($*1_ltype temp, int res = 0),
|
%typemap(in,numinputs=0) Type *OUTPUT ($*1_ltype temp, int res = 0),
|
||||||
|
|
@ -193,7 +193,7 @@ phased out in future releases.
|
||||||
%enddef
|
%enddef
|
||||||
|
|
||||||
#ifndef SWIG_INOUT_NODEF
|
#ifndef SWIG_INOUT_NODEF
|
||||||
#define PYVAL_INPUT_TYPEMAP(code,_a,_c,_af,_cf,...) \
|
#define PYVAL_INPUT_TYPEMAP(code,_a,_c,_af,_cf,...) \
|
||||||
_PYVAL_INPUT_TYPEMAP(SWIG_arg(code),SWIG_arg(_a),SWIG_arg(_c), \
|
_PYVAL_INPUT_TYPEMAP(SWIG_arg(code),SWIG_arg(_a),SWIG_arg(_c), \
|
||||||
SWIG_arg(_af),SWIG_arg(_cf),SWIG_arg(__VA_ARGS__))
|
SWIG_arg(_af),SWIG_arg(_cf),SWIG_arg(__VA_ARGS__))
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -22,6 +22,14 @@
|
||||||
%include "pymacros.swg"
|
%include "pymacros.swg"
|
||||||
|
|
||||||
|
|
||||||
|
/* -----------------------------------------------------------------------------
|
||||||
|
* Look for user fragments.i file, if not, include empty system one.
|
||||||
|
* ----------------------------------------------------------------------------- */
|
||||||
|
|
||||||
|
|
||||||
|
%include "fragments.i"
|
||||||
|
|
||||||
|
|
||||||
/* -----------------------------------------------------------------------------
|
/* -----------------------------------------------------------------------------
|
||||||
* SWIGTYPE typemaps
|
* SWIGTYPE typemaps
|
||||||
* ----------------------------------------------------------------------------- */
|
* ----------------------------------------------------------------------------- */
|
||||||
|
|
|
||||||
28
SWIG/Lib/python/pytuplehlp.swg
Normal file
28
SWIG/Lib/python/pytuplehlp.swg
Normal file
|
|
@ -0,0 +1,28 @@
|
||||||
|
/* Helper function to return tuples */
|
||||||
|
|
||||||
|
%fragment("t_output_helper","header") %{
|
||||||
|
static PyObject* t_output_helper(PyObject* target, PyObject* o) {
|
||||||
|
PyObject* o2;
|
||||||
|
PyObject* o3;
|
||||||
|
|
||||||
|
if (!target) {
|
||||||
|
target = o;
|
||||||
|
} else if (target == Py_None) {
|
||||||
|
Py_DECREF(Py_None);
|
||||||
|
target = o;
|
||||||
|
} else {
|
||||||
|
o2 = target;
|
||||||
|
target = PyTuple_New(1);
|
||||||
|
PyTuple_SetItem(target, 0, o2);
|
||||||
|
|
||||||
|
o3 = PyTuple_New(1);
|
||||||
|
PyTuple_SetItem(o3, 0, o);
|
||||||
|
|
||||||
|
o2 = target;
|
||||||
|
target = PySequence_Concat(o2, o3);
|
||||||
|
Py_DECREF(o2);
|
||||||
|
Py_DECREF(o3);
|
||||||
|
}
|
||||||
|
return target;
|
||||||
|
}
|
||||||
|
%}
|
||||||
Loading…
Add table
Add a link
Reference in a new issue