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;
}
Ejemplo n.º 2
0
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;
}