Beispiel #1
0
static int 
get_resp_value(int ret) 
{
	char resp[STD_RESP_LEN + 1], **argv;
	int count, result = -1, argc;

	count = read(serverfd, resp, STD_RESP_LEN);

	if (count > 0) {
		resp[count] = '\0';
		argc = str_to_argv(resp, &argv);
		if (argc == -1)
			printf_die(stderr, "[ERROR] Cannot allocate buffer... exiting!\n", EXIT_FAILURE);
		if (argc >= 1 && str_isnumber(argv[0])) {
			eval_response(atoi(argv[0]));
			if (argc >= 2 && str_isnumber(argv[1]))
				result = atoi(argv[1]);
			else
				result = 0;
		}
		free(argv);
	}
	if (ret == -1)
		printf_die(stdout, "Server probably dead or you have been killed!\n");
	return result;
}
static PyObject *
PyResponse_eval_response(PyResponse *self, PyObject *args)
{
    double omega, real, imag;
    PyObject *result;
    if (! PyArg_ParseTuple(args, "d", &omega))
        return NULL;
    if (eval_response(omega, self->response, &real, &imag) != 0)
        return NULL;
    result = PyComplex_FromDoubles(real, imag);
    if (result == NULL)
        return NULL;
    return result;
}
void mexFunction ( int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[] )
{
	Response *response;
	double 	*real_ptr, *imag_ptr; 
	double	*omega_ptr;
	int	M, N;
	int	nelements;
	int	rc;
	int	i;

	if( nlhs > 1 ) 
	{
		antelope_mexUsageMsgTxt ( USAGE );
		return;
	}

	if( nrhs != 2 )
	{
		antelope_mexUsageMsgTxt ( USAGE );
		return;
	}
        else if( ! mtlb_get_response( prhs[0], &response ) )
        {
                antelope_mexUsageMsgTxt ( USAGE );
		return;
        }
	else if( mxGetClassID( prhs[1] ) != mxDOUBLE_CLASS )
	{
		antelope_mexUsageMsgTxt ( USAGE );
		return;
	}
	else if( mxGetNumberOfDimensions( prhs[1] ) != 2 )
	{
		antelope_mexUsageMsgTxt ( USAGE );
		return;
	}
	
	M = mxGetM( prhs[1] );
	N = mxGetN( prhs[1] );

	plhs[0] = mxCreateDoubleMatrix( M, N, mxCOMPLEX );

	nelements = M * N;

	omega_ptr = (double *) mxGetPr( prhs[1] );
	real_ptr = (double *) mxGetPr( plhs[0] );
	imag_ptr = (double *) mxGetPi( plhs[0] );

	for( i = 0; i < nelements; i++ ) 
	{
		rc = eval_response( *omega_ptr++, response,
					real_ptr++, imag_ptr++ );
		
		if( rc ) {
			mxDestroyArray( plhs[0] );
			antelope_mex_clear_register( 1 );
			mexErrMsgTxt( "eval_response failed" );

		}
	}
}