// FFT (Fast Fourier Transform) Server Interface // R. Ansari 1999-2000 // DAPNIA/SPP (Saclay) / CEA LAL - IN2P3/CNRS (Orsay) #ifndef FFTServerIntf_H_SEEN #define FFTServerIntf_H_SEEN #include "machdefs.h" #include "pexceptions.h" #include #include "tmatrix.h" #include "tvector.h" // Classe definissant l'interface pour les transformees de Fourier // L'implementation par defaut est vide et lance une exception namespace SOPHYA { class FFTServerInterface { public: // Methodes de la classe FFTServerInterface(string info); virtual ~FFTServerInterface(); virtual FFTServerInterface * Clone() = 0; inline void setNormalize(bool fg=false) { _fgnorm = fg; } inline bool getNormalize() const { return(_fgnorm); } inline string getInfo() const { return _info; } // Transforme unidimensionnel sur des doubles virtual void FFTForward(TVector< complex > const & in, TVector< complex > & out); virtual void FFTBackward(TVector< complex > const & in, TVector< complex > & out); virtual void FFTForward(TVector< r_8 > const & in, TVector< complex > & out); virtual void FFTBackward(TVector< complex > const & in, TVector< r_8 > & out); // Transforme unidimensionnel sur des float virtual void FFTForward(TVector< complex > const & in, TVector< complex > & out); virtual void FFTBackward(TVector< complex > const & in, TVector< complex > & out); virtual void FFTForward(TVector< r_4 > const & in, TVector< complex > & out); virtual void FFTBackward(TVector< complex > const & in, TVector< r_4 > & out); //--------------------------------------------------- // Transforme N-dim sur des doubles virtual void FFTForward(TArray< complex > const & in, TArray< complex > & out); virtual void FFTBackward(TArray< complex > const & in, TArray< complex > & out); virtual void FFTForward(TArray< r_8 > const & in, TArray< complex > & out); virtual void FFTBackward(TArray< complex > const & in, TArray< r_8 > & out); // Transforme N-dim sur des float virtual void FFTForward(TArray< complex > const & in, TArray< complex > & out); virtual void FFTBackward(TArray< complex > const & in, TArray< complex > & out); virtual void FFTForward(TArray< r_4 > const & in, TArray< complex > & out); virtual void FFTBackward(TArray< complex > const & in, TArray< r_4 > & out); protected: bool _fgnorm; string _info; }; } // Fin du namespace template class FFTArrayChecker { public: FFTArrayChecker(bool checkpack=true, bool onedonly=false); virtual ~FFTArrayChecker(); virtual int CheckResize(TArray< complex > const & in, TArray< complex > & out); virtual int CheckResize(TArray< T > const & in, TArray< complex > & out); virtual int CheckResize(TArray< complex > const & in, TArray< T > & out); virtual void ReShapetoReal(TArray< complex > const & in, TArray< T > & out); virtual void ReShapetoCompl(TArray< T > const & in, TArray< complex > & out); protected: bool _checkpack; bool _onedonly; }; #endif