text: /* Copyright 2001, 2019 IBM Corporation
   *
   * Redistribution and use in source and binary forms, with or without modification, are permitted provided that the 
   * following conditions are met:
   *
   * 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the 
   * following disclaimer.
   *
   * 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the 
   * following disclaimer in the documentation and/or other materials provided with the distribution.
   *
   * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, 
   * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 
   * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 
   * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 
   * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 
   * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE 
   * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
   */
   #include <iostream>
  #include <math.h>
  #include <assert.h>
  #include "fft_one_dim.hpp"
  #include "../fftw/fftw.h"
  
  FFTOneD::~FFTOneD() {
    fftw_destroy_plan(_plan);
  }
  
  void  FFTOneD::fftInternal(complex *in, 
  			   complex *out) {
    fftw_one(_plan, (fftw_complex *) in, (fftw_complex *)out); 
  }
  
  FFTOneD::FFTOneD(unsigned int vectorSz,
  		 short int fftDir,
  		 unsigned int numOfFFTs):
    _vectorSz(vectorSz){
  
     assert(fftDir!=1||fftDir!=-1);
     assert(vectorSz>= 0);
     _numOfFFTs=numOfFFTs;
  
   if(fftDir==-1) {
      _fftw_direction = FFTW_FORWARD;
    }
    else if(fftDir=1) {
      _fftw_direction = FFTW_BACKWARD;
    }
     
   //  cout<< " fft_direction " << _fftw_direction
   //      << " vectorSz    " << _vectorSz << endl;
   
   _plan = fftw_create_plan(_vectorSz, _fftw_direction, FFTW_MEASURE);
   
  }
  
  void FFTOneD::printFFT(complex *out) {
    fftw_complex *output = (fftw_complex*) out;
  
    for(int i=0; i<_vectorSz; i++) {
      cout<< " FFT(vector[ " << i << " ]) = " 
  	<< " (" <<output[i].re << " , "<< output[i].im <<")" << endl;
    }
  } 
  
  