From cce4f057848ff98dec6dfd779eb513fd69114acc Mon Sep 17 00:00:00 2001 From: Mikel Bancroft Date: Mon, 6 Mar 2006 18:47:07 +0000 Subject: [PATCH] 3/6/2006: mutandiz [allegrocl] add Lib/allegrocl/inout_typemaps.i git-svn-id: https://swig.svn.sourceforge.net/svnroot/swig/trunk/SWIG@8970 626c5289-ae23-0410-ae9c-e8d60b6d4f22 --- Lib/allegrocl/inout_typemaps.i | 53 ++++++++++++++++++++++++++++++++++ 1 file changed, 53 insertions(+) create mode 100755 Lib/allegrocl/inout_typemaps.i diff --git a/Lib/allegrocl/inout_typemaps.i b/Lib/allegrocl/inout_typemaps.i new file mode 100755 index 000000000..e44ae7cbd --- /dev/null +++ b/Lib/allegrocl/inout_typemaps.i @@ -0,0 +1,53 @@ +/* inout_typemaps.i + + Support for INPUT, OUTPUT, and INOUT typemaps. OUTPUT variables are returned + as multiple values. + +*/ + + +%define INOUT_TYPEMAP(type_) +// OUTPUT map. +%typemap(lin,numinputs=0) type_ *OUTPUT +%{ + (let (($out (ff:allocate-fobject '$*in_fftype :c))) + $body + (push (ff:fslot-value-typed '$*in_fftype :c $out) ACL_result) + (ff:free-fobject $out)) +%} + +// INPUT map. +%typemap(in) type_ *INPUT, type_ &INPUT +%{ $1 = &$input; %} + +%typemap(ctype) type_ *INPUT, type_ &INPUT "$*1_ltype"; + + +// INOUT map. +%typemap(lin,numinputs=1) type_ *INOUT, type_ &INOUT +%{ + (let (($out (ff:allocate-fobject '$*in_fftype :c))) + (setf (ff:fslot-value-typed '$*in_fftype :c $out) $in) + $body + (push (ff:fslot-value-typed $*in_fftype :c $out) ACL_result) + (ff:free-fobject $out)) +%} + +%enddef + +// $in, $out, $lclass, +// $in_fftype, $*in_fftype + +INOUT_TYPEMAP(int); +INOUT_TYPEMAP(short); +INOUT_TYPEMAP(long); +INOUT_TYPEMAP(unsigned int); +INOUT_TYPEMAP(unsigned short); +INOUT_TYPEMAP(unsigned long); +INOUT_TYPEMAP(char); +INOUT_TYPEMAP(bool); +INOUT_TYPEMAP(float); +INOUT_TYPEMAP(double); +// long long support not yet complete +// INOUT_TYPEMAP(long long); +// INOUT_TYPEMAP(unsigned long long); \ No newline at end of file