int *kinds(char *input,int start,int end, int *rsize){ int *temp=NULL,i,j,k,*temp1,*temp2,a,b,t,all=0,sum,first=0; temp=(int *)malloc(sizeof(int)); sum=have(input,start,end,&first); if(sum==0){ temp[0]=first; *rsize=1; return temp; } for(i=start;i<=end;i++){ if(input[i]=='+' || input[i]=='-' || input[i]=='*'){ temp1=kinds(input,start,i-1, &a); temp2=kinds(input,i+1,end,&b); t=a*b; temp=(int *)realloc(temp,sizeof(int)*(all+t)); for(j=0;j<a;j++) for(k=0;k<b;k++){ if(input[i]=='+'){ temp[all]=temp1[j]+temp2[k]; }else if(input[i]=='-'){ temp[all]=temp1[j]-temp2[k]; }else if(input[i]=='*'){ temp[all]=temp1[j]*temp2[k]; } all++; } } } *rsize=all; return temp; }
void DCT::apply(Image im, bool transformX, bool transformY, bool transformT) { if (im.width == 1) { transformX = false; } if (im.height == 1) { transformY = false; } if (im.frames == 1) { transformT = false; } // rank 0 if (!transformX && !transformY && !transformT) { return; } vector<fftwf_iodim> loop_dims; vector<fftwf_iodim> fft_dims; // X { fftwf_iodim d = {im.width, 1, 1}; if (transformX) fft_dims.push_back(d); else loop_dims.push_back(d); } // Y { fftwf_iodim d = {im.height, im.ystride, im.ystride}; if (transformY) fft_dims.push_back(d); else loop_dims.push_back(d); } // T { fftwf_iodim d = {im.frames, im.tstride, im.tstride}; if (transformT) fft_dims.push_back(d); else loop_dims.push_back(d); } // C { fftwf_iodim d = {im.channels, im.cstride, im.cstride}; loop_dims.push_back(d); } vector<fftw_r2r_kind> kinds(fft_dims.size(), FFTW_REDFT00); fftwf_plan plan = fftwf_plan_guru_r2r((int)fft_dims.size(), &fft_dims[0], (int)loop_dims.size(), &loop_dims[0], im.baseAddress(), im.baseAddress(), &kinds[0], FFTW_ESTIMATE); fftwf_execute(plan); fftwf_destroy_plan(plan); float m = 1.0; if (transformX) m *= 2*(im.width-1); if (transformY) m *= 2*(im.height-1); if (transformT) m *= 2*(im.frames-1); im /= sqrtf(m); }
int* diffWaysToCompute(char* input, int* returnSize) { int *r=NULL,a=0; r=kinds(input,0,strlen(input)-1,&a); * returnSize=a; return r; }