dft_plan_t* generate_new_plan(int dft_size) { int i; static int oldest_extra_plan = 0; modinfo_msg("Warning, no plan was precomputed for size %d. Generating.\n",dft_size); for (i=0;i<(MAX_EXTRA_PLANS-1);i++) { if (!extra_plans[i].size) { if (dft_plan_c2c(dft_size, (!direction)?FORWARD:BACKWARD, &extra_plans[i])) { return NULL; } extra_plans[i].options = options; return &extra_plans[i]; } } if (oldest_extra_plan == (MAX_EXTRA_PLANS-1)) { oldest_extra_plan = 0; } else { oldest_extra_plan++; } if (dft_plan_c2c(dft_size, (!direction)?FORWARD:BACKWARD, &extra_plans[oldest_extra_plan])) { return NULL; } extra_plans[oldest_extra_plan].options = options; return &extra_plans[oldest_extra_plan]; /*modinfo_msg("Maximum number of extra plans (%d) surpassed.\n",MAX_EXTRA_PLANS); return NULL;*/ }
int dft_plan_c2r(const int dft_points, dft_dir_t dir, dft_plan_t *plan) { if (dft_plan_c2c(dft_points, dir, plan)) { return -1; } plan->mode = COMPLEX_2_REAL; return 0; }
dft_plan_t* generate_new_plan(int dft_size) { int i; modinfo_msg("Warning, no plan was precomputed for size %d. Generating.\n",dft_size); for (i=0;i<MAX_EXTRA_PLANS;i++) { if (!extra_plans[i].size) { if (dft_plan_c2c(dft_size, (!direction)?FORWARD:BACKWARD, &extra_plans[i])) { return NULL; } extra_plans[i].options = options; return &extra_plans[i]; } } return NULL; }
int dft_plan(const int dft_points, dft_mode_t mode, dft_dir_t dir, dft_plan_t *plan) { switch(mode) { case COMPLEX_2_COMPLEX: if (dft_plan_c2c(dft_points,dir,plan)) { return -1; } break; case REAL_2_REAL: if (dft_plan_r2r(dft_points,dir,plan)) { return -1; } break; case COMPLEX_2_REAL: if (dft_plan_c2r(dft_points,dir,plan)) { return -1; } break; } return 0; }