matthiasm@8: /* matthiasm@8: mex -c mexutil.c matthiasm@8: mex repmat.c mexutil.obj matthiasm@8: to check for warnings: matthiasm@8: gcc -Wall -I/cygdrive/c/MATLAB6p1/extern/include -c repmat.c matthiasm@8: */ matthiasm@8: #include "mexutil.h" matthiasm@8: #include matthiasm@8: matthiasm@8: /* repeat a block of memory rep times */ matthiasm@8: void memrep(char *dest, size_t chunk, int rep) matthiasm@8: { matthiasm@8: #if 0 matthiasm@8: /* slow way */ matthiasm@8: int i; matthiasm@8: char *p = dest; matthiasm@8: for(i=1;i>1); matthiasm@8: #endif matthiasm@8: } matthiasm@8: matthiasm@8: void repmat(char *dest, const char *src, int ndim, int *destdimsize, matthiasm@8: int *dimsize, const int *dims, int *rep) matthiasm@8: { matthiasm@8: int d = ndim-1; matthiasm@8: int i, chunk; matthiasm@8: /* copy the first repetition into dest */ matthiasm@8: if(d == 0) { matthiasm@8: chunk = dimsize[0]; matthiasm@8: memcpy(dest,src,chunk); matthiasm@8: } matthiasm@8: else { matthiasm@8: /* recursively repeat each slice of src */ matthiasm@8: for(i=0;i ndimdest) ndimdest = nrep; matthiasm@8: rep = mxCalloc(ndimdest, sizeof(int)); matthiasm@8: for(i=0;i ndimdest) ndimdest = nrep; matthiasm@8: rep = mxCalloc(ndimdest, sizeof(int)); matthiasm@8: for(i=0;i ndim) memrep(dest,destdimsize[ndim-1],extra_rep); matthiasm@8: if(mxIsComplex(srcmat)) { matthiasm@8: src = (char*)mxGetPi(srcmat); matthiasm@8: dest = (char*)mxGetPi(plhs[0]); matthiasm@8: repmat(dest,src,ndim,destdimsize,dimsize,dims,rep); matthiasm@8: if(ndimdest > ndim) memrep(dest,destdimsize[ndim-1],extra_rep); matthiasm@8: } matthiasm@8: }