Math-Matlab-Engine

 view release on metacpan or  search on metacpan

Engine.xs  view on Meta::CPAN



double
constant(sv,arg)
    PREINIT:
	STRLEN		len;
    INPUT:
	SV *		sv
	char *		s = SvPV(sv, len);
	int		arg
    CODE:
	RETVAL = constant(s,len,arg);
    OUTPUT:
	RETVAL



Engine *
new(CLASS)
	char *		CLASS
    CODE:
    {
	Engine *ep;

	if (!(ep = engOpen("\0"))) {
		croak ("Can't start MATLAB engine");
	}

	RETVAL = ep;
    }
    OUTPUT:
	RETVAL

int
engClose(ep)
	Engine *	ep
    CODE:
    {
	RETVAL = 1 - engClose(ep);
    }
    OUTPUT:
	RETVAL

int
engEvalString(ep, string)
	Engine *	ep
	const char *	string
    CODE:
    {
	RETVAL = (engEvalString(ep, string) == 0);
    }
    OUTPUT:
	RETVAL


AV *
engGetArrayList(ep, name)
	Engine *	ep
	const char *	name

    PPCODE:
    {
	mxArray *matrix;
	int nrdim, *dims, i, nelem;
	double *vals;

	matrix = engGetArray(ep, name);
	if (matrix == NULL)
		XSRETURN_UNDEF;

	nrdim = mxGetNumberOfDimensions(matrix);
	printf("%d dimensions\n",nrdim);

	dims = mxGetDimensions(matrix);
	nelem = 1;
	for(i=0;i<nrdim;i++) {
		printf("\t%d\n",*(dims+i));
		nelem *= *(dims+i);
	}
	vals = mxGetPr(matrix);
	for(i=0;i<nelem;i++) {
		XPUSHs(sv_2mortal(newSVnv(*(vals+i))));
		printf("%6.4f,",*(vals+i));
	}
	printf("\n");

		
    }

SV *
engGetArrayListRef(ep, name)
	Engine *	ep
	const char *	name

    CODE:
    {
	mxArray *matrix;
	int nrdim, *dims, i, nelem;
	double *vals;
	AV *arr;

	matrix = engGetArray(ep, name);
	if (matrix == NULL)
		XSRETURN_UNDEF;

	nrdim = mxGetNumberOfDimensions(matrix);
	printf("%d dimensions\n",nrdim);

	dims = mxGetDimensions(matrix);
	nelem = 1;
	for(i=0;i<nrdim;i++) {
		printf("\t%d\n",*(dims+i));
		nelem *= *(dims+i);
	}
	vals = mxGetPr(matrix);
	arr = newAV();
	for(i=0;i<nelem;i++) {
		av_push(arr, newSVnv(*(vals+i)));
		printf("%6.4f,",*(vals+i));
	}
	printf("\n");	



( run in 1.603 second using v1.01-cache-2.11-cpan-5511b514fd6 )