%module "Math::GSL::QRNG"
%include "typemaps.i"
%include "gsl_typemaps.i"
%include "renames.i"

%apply double *OUTPUT { double x[] };
%typemap(freearg) double x[];

%typemap(argout) double x[] {

    if (argvi >= items) {
        EXTEND(sp,1);
    }
    $result = sv_newmortal();
    sv_setnv($result,(NV) *($1));
    argvi++;

    $result = sv_newmortal();
    sv_setnv($result,(NV) *($1+1));
    argvi++;
}

%newobject gsl_qrng_alloc;
%newobject gsl_qrng_clone;
%extend gsl_qrng {
    ~gsl_qrng() {
        gsl_qrng_free($self);
    }
 }

%{
    #include "gsl/gsl_inline.h"
    #include "gsl/gsl_types.h"
    #include "gsl/gsl_qrng.h"
%}

%include "gsl/gsl_inline.h"
%include "gsl/gsl_types.h"
%include "gsl/gsl_qrng.h"
%include "../pod/QRNG.pod"