swig/Lib/python/pyptrtypes.swg
2004-03-17 09:41:19 +00:00

146 lines
4.4 KiB
Text

/*
Value typemaps (Type, const Type&) for "Ptr" types, such as swig
wrapped classes, that define the AsPtr/From methods
*/
/* in */
%define PYPTR_IN_TYPEMAP(pyobj_asptr,pyfrag,...)
%typemap(in,fragment=pyfrag) __VA_ARGS__ {
__VA_ARGS__ *ptr;
int res = pyobj_asptr($input, &ptr);
if (!res) SWIG_fail;
$1 = *ptr;
if (res > 1) delete ptr;
}
%typemap(in,fragment=pyfrag) const __VA_ARGS__ & (int res = 0)
"if (!(res = pyobj_asptr($input, &$1))) SWIG_fail;";
%typemap(freearg) const __VA_ARGS__ &
"if (res$argnum > 1) delete $1;";
%enddef
/* out */
%define PYPTR_OUT_TYPEMAP(pyobj_from,pyfrag,...)
%typemap(out,fragment=pyfrag) __VA_ARGS__
"$result = pyobj_from($1);";
%typemap(out,fragment=pyfrag) const __VA_ARGS__&
"$result = pyobj_from(*($1));";
%enddef
/* varin */
%define PYPTR_VARIN_TYPEMAP(pyobj_asptr,pyfrag,...)
%typemap(varin,fragment=pyfrag) __VA_ARGS__ {
__VA_ARGS__ *ptr;
int res = pyobj_asptr($input, &ptr);
if (!res) {
PyErr_SetString(PyExc_TypeError, "C variable '$name ($1_ltype)'");
return 1;
}
if (!res) SWIG_fail;
$1 = *ptr;
if (res > 1) delete ptr;
}
%enddef
/* varout */
%define PYPTR_VAROUT_TYPEMAP(pyobj_from,pyfrag,...)
%typemap(varout,fragment=pyfrag) __VA_ARGS__, const __VA_ARGS__&
"$result = pyobj_from($1);";
%enddef
/* Primitive types */
%define PYPTR_CONSTCODE_TYPEMAP(pyobj_from,pyfrag,...)
%typemap(constcode,fragment=pyfrag) __VA_ARGS__
"PyDict_SetItemString(d,\"$symname\", pyobj_from($value));";
%enddef
/* directorin */
%define PYPTR_DIRECTORIN_TYPEMAP(pyobj_from,pyfrag,...)
%typemap(directorin,fragment=pyfrag) __VA_ARGS__
"$input = pyobj_from($1_name);";
%enddef
/* directorout */
%define PYPTR_DIRECTOROUT_TYPEMAP(pyobj_asptr,pyfrag,...)
%typemap(directorargout,fragment=pyfrag) __VA_ARGS__ *DIRECTOROUT ($*1_ltype temp) {
__VA_ARGS__ *ptr;
int res = pyobj_asptr($input, &ptr);
if (!res)
throw Swig::DirectorTypeMismatchException("Error converting Python object using pyobj_asptr");
temp = *ptr;
$result = &temp;
if (res > 1) delete ptr;
}
%typemap(directorout,fragment=pyfrag) __VA_ARGS__ {
__VA_ARGS__ *ptr;
int res = pyobj_asptr($input, &ptr);
if (!res)
throw Swig::DirectorTypeMismatchException("Error converting Python object using pyobj_asptr");
$result = *ptr;
if (res > 1) delete ptr;
}
%typemap(directorout,fragment=pyfrag) const __VA_ARGS__& ($*1_ltype temp) {
__VA_ARGS__ *ptr;
int res = pyobj_asptr($input, &ptr);
if (!res)
throw Swig::DirectorTypeMismatchException("Error converting Python object using pyobj_asptr");
temp = *ptr;
$result = &temp;
if (res > 1) delete ptr;
}
%typemap(directorout,fragment=pyfrag) __VA_ARGS__ &DIRECTOROUT = __VA_ARGS__
%enddef
/* throws */
%define PYPTR_THROWS_TYPEMAP(pyobj_from,pyfrag,...)
%typemap(throws,fragment=pyfrag) __VA_ARGS__ {
PyErr_SetObject(PyExc_RuntimeError, pyobj_from($1));
SWIG_fail;
}
%enddef
/* typecheck */
%define PYPTR_TYPECHECK_TYPEMAP(check,pyobj_asptr,pyfrag,...)
%typemap(typecheck,precedence=check,fragment=pyfrag)
__VA_ARGS__, const __VA_ARGS__&
"$1 = pyobj_asptr($input, (__VA_ARGS__**)(0));";
%enddef
/*
typemap definition for types with AsPtr/From methods
*/
%define %typemap_asptrfrom(CheckCode, AsPtrMeth, FromMeth, AsPtrFrag, FromFrag, ...)
PYPTR_IN_TYPEMAP(SWIG_arg(AsPtrMeth), SWIG_arg(AsPtrFrag), __VA_ARGS__);
PYPTR_OUT_TYPEMAP(SWIG_arg(FromMeth), SWIG_arg(FromFrag), __VA_ARGS__);
PYPTR_VARIN_TYPEMAP(SWIG_arg(AsPtrMeth), SWIG_arg(AsPtrFrag), __VA_ARGS__);
PYPTR_VAROUT_TYPEMAP(SWIG_arg(FromMeth), SWIG_arg(FromFrag), __VA_ARGS__);
PYPTR_CONSTCODE_TYPEMAP(SWIG_arg(FromMeth), SWIG_arg(FromFrag), __VA_ARGS__);
PYPTR_DIRECTORIN_TYPEMAP(SWIG_arg(FromMeth), SWIG_arg(FromFrag), __VA_ARGS__);
PYPTR_DIRECTOROUT_TYPEMAP(SWIG_arg(AsPtrMeth), SWIG_arg(AsPtrFrag), __VA_ARGS__);
PYPTR_THROWS_TYPEMAP(SWIG_arg(FromMeth), SWIG_arg(FromFrag),__VA_ARGS__);
PYPTR_TYPECHECK_TYPEMAP(SWIG_arg(CheckCode), SWIG_arg(AsPtrMeth),
SWIG_arg(AsPtrFrag), __VA_ARGS__);
%enddef
/*
typemap for simple swig types with only AsPtr/From conversor methods
*/
%define %typemap_asptrfromn(CheckCode, ...)
%typemap_asptrfrom(SWIG_arg(CheckCode),
SWIG_AsPtr_meth(__VA_ARGS__),
SWIG_From_meth(__VA_ARGS__),
SWIG_arg(SWIG_AsPtr_frag(__VA_ARGS__)),
SWIG_arg(SWIG_From_frag(__VA_ARGS__)),
__VA_ARGS__);
%enddef