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