evaluation/UAV-benchmark-MOTD_v1.0/utils/ismember_mex.c (45 lines of code) (raw):

/* *Expects two sorted arrays !!! * *Example: * >>ismember_mex( [1 3 5], [1 2 3 4 6 7 8] ) *ans = 1 1 0 */ #include <matrix.h> #include "mex.h" #include <matrix.h> void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]) { double *in1, *in2, *locb; mxLogical *out; int N,M; in1 = mxGetPr(prhs[0]); in2 = mxGetPr(prhs[1]); N = (int)mxGetNumberOfElements(prhs[0]); M = (int)mxGetNumberOfElements(prhs[1]); plhs[0] = mxCreateLogicalMatrix(N, 1); out = mxGetLogicals(plhs[0]); plhs[1] = mxCreateDoubleMatrix(N, 1, mxREAL); locb = mxGetPr(plhs[1]); int pos = 0; int i = 0; while (i < N && pos < M) { while (pos < M) { if (in1[i] == in2[pos]) { out[i] = true; locb[i] = pos + 1; pos++; i++; break; } else if (in1[i] < in2[pos]) { out[i] = false; locb[i] = 0; i++; if (i == N) break; } else { pos++; } } } }