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