/* -*- 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;
}

%}
