// Extract the elements in X (a dense matrix) indexed by jc and ir.
// Usage: b = proj_omega_sub(X,jc,ir);

#include "mex.h"

void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]){

  mwSize m = mxGetM(prhs[0]);
  mwSize n = mxGetN(prhs[0]);
  
  double* X = mxGetPr(prhs[0]);

  mwIndex* jc = (mwIndex*)mxGetData(prhs[1]);
  mwIndex* ir = (mwIndex*)mxGetData(prhs[2]);
  int nb_samples = mxGetNumberOfElements(prhs[2]);

  plhs[0] = mxCreateDoubleMatrix(nb_samples, 1, mxREAL);
  double *b = mxGetPr(plhs[0]), *p;

  mwSize nnz;
  for(mwIndex j = 0; j < n; j++) 
  { 
    nnz = jc[j+1] - jc[j];
    p = X + j*m;
    for (mwIndex i = 0; i < nnz; i++)
      *b++ = *(p + *(ir++));
  }
}
