| /* -*- c -*- */ |
| |
| %module multivalue |
| |
| #ifdef SWIGGUILE |
| |
| /* Multiple values as lists. By default, if more than one value is to |
| be returned, a list of the values is created and returned; to switch |
| back to this behavior, use: */ |
| %values_as_list; |
| |
| void divide_l(int a, int b, int *OUTPUT, int *OUTPUT); |
| |
| /* Multiple values as vectors. By issuing: */ |
| %values_as_vector; |
| /* vectors instead of lists will be used. */ |
| |
| void divide_v(int a, int b, int *OUTPUT, int *OUTPUT); |
| |
| /* Multiple values for multiple-value continuations. |
| (This is the most elegant way.) By issuing: */ |
| %multiple_values; |
| /* multiple values are passed to the multiple-value |
| continuation, as created by `call-with-values' or the |
| convenience macro `receive'. (See the Scheme file.) */ |
| |
| void divide_mv(int a, int b, int *OUTPUT, int *OUTPUT); |
| |
| #else |
| %include "typemaps.i" |
| void divide_l(int a, int b, int *OUTPUT, int *OUTPUT); |
| void divide_v(int a, int b, int *OUTPUT, int *OUTPUT); |
| void divide_mv(int a, int b, int *OUTPUT, int *OUTPUT); |
| #endif |
| |
| %{ |
| |
| void divide_l(int a, int b, int *quotient_p, int *remainder_p) |
| { |
| *quotient_p = a/b; |
| *remainder_p = a%b; |
| } |
| |
| void divide_v(int a, int b, int *quotient_p, int *remainder_p) |
| { |
| *quotient_p = a/b; |
| *remainder_p = a%b; |
| } |
| |
| void divide_mv(int a, int b, int *quotient_p, int *remainder_p) |
| { |
| *quotient_p = a/b; |
| *remainder_p = a%b; |
| } |
| |
| %} |