idamnjanovic@60: /************************************************************************** idamnjanovic@60: * idamnjanovic@60: * File name: sprow.c idamnjanovic@60: * idamnjanovic@60: * Ron Rubinstein idamnjanovic@60: * Computer Science Department idamnjanovic@60: * Technion, Haifa 32000 Israel idamnjanovic@60: * ronrubin@cs idamnjanovic@60: * idamnjanovic@60: * Last Updated: 24.8.2009 idamnjanovic@60: * idamnjanovic@60: *************************************************************************/ idamnjanovic@60: idamnjanovic@60: idamnjanovic@60: #include "mex.h" idamnjanovic@60: #include "mexutils.h" idamnjanovic@60: idamnjanovic@60: idamnjanovic@60: /* Input Arguments */ idamnjanovic@60: idamnjanovic@60: #define A_IN prhs[0] idamnjanovic@60: #define J_IN prhs[1] idamnjanovic@60: idamnjanovic@60: idamnjanovic@60: /* Output Arguments */ idamnjanovic@60: idamnjanovic@60: #define X_OUT plhs[0] idamnjanovic@60: #define ID_OUT plhs[1] idamnjanovic@60: idamnjanovic@60: idamnjanovic@60: void mexFunction(int nlhs, mxArray *plhs[], idamnjanovic@60: int nrhs, const mxArray*prhs[]) idamnjanovic@60: idamnjanovic@60: { idamnjanovic@60: double *pr, *x, *id, rowid; idamnjanovic@60: mwIndex *ir, *jc; idamnjanovic@60: mwSize m, n; idamnjanovic@60: mwIndex i, j, k, l, rowlen; idamnjanovic@60: idamnjanovic@60: if (nrhs != 2) { idamnjanovic@60: mexErrMsgTxt("GETSPROW requires two input arguments."); idamnjanovic@60: } else if (nlhs > 2) { idamnjanovic@60: mexErrMsgTxt("Too many output arguments."); idamnjanovic@60: } idamnjanovic@60: idamnjanovic@60: checkmatrix(A_IN, "GETSPROW", "A"); idamnjanovic@60: checksparse(A_IN, "GETSPROW", "A"); idamnjanovic@60: checkscalar(J_IN, "GETSPROW", "J"); idamnjanovic@60: idamnjanovic@60: m = mxGetM(A_IN); idamnjanovic@60: n = mxGetN(A_IN); idamnjanovic@60: idamnjanovic@60: rowid = mxGetScalar(J_IN); idamnjanovic@60: if (rowid < 0) { idamnjanovic@60: mexErrMsgTxt("Invalid row index."); idamnjanovic@60: } idamnjanovic@60: j = (mwIndex)(rowid + 1e-2); idamnjanovic@60: if (j<1 || j>m) { idamnjanovic@60: mexErrMsgTxt("Row index is out of range."); idamnjanovic@60: } idamnjanovic@60: j--; idamnjanovic@60: idamnjanovic@60: pr = mxGetPr(A_IN); idamnjanovic@60: ir = mxGetIr(A_IN); idamnjanovic@60: jc = mxGetJc(A_IN); idamnjanovic@60: idamnjanovic@60: /* Determine length of row */ idamnjanovic@60: rowlen = 0; idamnjanovic@60: for (i=0; i