diff --git a/src/fft_plan_manager.cpp b/src/fft_plan_manager.cpp new file mode 100644 index 0000000..1c96d82 --- /dev/null +++ b/src/fft_plan_manager.cpp @@ -0,0 +1,78 @@ +/** + * + * @author Guillaume Anciaux + * + * @section LICENSE + * + * Copyright (©) 2016 EPFL (Ecole Polytechnique Fédérale de + * Lausanne) Laboratory (LSMS - Laboratoire de Simulation en Mécanique des + * Solides) + * + * Tamaas is free software: you can redistribute it and/or modify it under the + * terms of the GNU Lesser General Public License as published by the Free + * Software Foundation, either version 3 of the License, or (at your option) any + * later version. + * + * Tamaas is distributed in the hope that it will be useful, but WITHOUT ANY + * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more + * details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Tamaas. If not, see . + * + */ +/* -------------------------------------------------------------------------- */ +#include "fft_plan_manager.hh" +/* -------------------------------------------------------------------------- */ + + +__BEGIN_TAMAAS__ +/* -------------------------------------------------------------------------- */ + +FFTPlanManager & FFTPlanManager::get(){ + if (FFTPlanManager::singleton == NULL) + FFTPlanManager::singleton = new FFTPlanManager(); + + return *FFTPlanManager::singleton; +} +/* -------------------------------------------------------------------------- */ + +FFTransform & FFTPlanManager::createPlan(Surface & input, + SurfaceComplex & output){ + + auto index = std::make_pair(const_cast(input.getInternalData()), + const_cast(output.getInternalData())); + + auto it = plans.find(index); + auto end = plans.end(); + + if (it != end){ + plans[index] = new FFTransform(input.size(),input,output); + } + + return *plans[index]; +} + +/* -------------------------------------------------------------------------- */ + +void FFTPlanManager::destroyPlan(Surface & input, + SurfaceComplex & output){ + + auto index = std::make_pair(const_cast(input.getInternalData()), + const_cast(output.getInternalData())); + + auto it = plans.find(index); + auto end = plans.end(); + + if (it != end){ + delete (plans[index]); + plans.erase(index); + } +} + +/* -------------------------------------------------------------------------- */ + + + +__END_TAMAAS__ diff --git a/src/fft_plan_manager.hh b/src/fft_plan_manager.hh new file mode 100644 index 0000000..90d5bde --- /dev/null +++ b/src/fft_plan_manager.hh @@ -0,0 +1,77 @@ +/** + * + * @author Guillaume Anciaux + * + * @section LICENSE + * + * Copyright (©) 2016 EPFL (Ecole Polytechnique Fédérale de + * Lausanne) Laboratory (LSMS - Laboratoire de Simulation en Mécanique des + * Solides) + * + * Tamaas is free software: you can redistribute it and/or modify it under the + * terms of the GNU Lesser General Public License as published by the Free + * Software Foundation, either version 3 of the License, or (at your option) any + * later version. + * + * Tamaas is distributed in the hope that it will be useful, but WITHOUT ANY + * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more + * details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Tamaas. If not, see . + * + */ +/* -------------------------------------------------------------------------- */ +#ifndef FFT_PLAN_MANAGER_H +#define FFT_PLAN_MANAGER_H +/* -------------------------------------------------------------------------- */ +#include +#include "fftransform.hh" +/* -------------------------------------------------------------------------- */ +__BEGIN_TAMAAS__ +/* -------------------------------------------------------------------------- */ + +class FFTPlanManager { + + + /* ------------------------------------------------------------------------ */ + /* Constructors/Destructors */ + /* ------------------------------------------------------------------------ */ +protected: + + + FFTPlanManager(); + +public: + + virtual ~FFTPlanManager(); + +public: + + /* ------------------------------------------------------------------------ */ + /* Methods */ + /* ------------------------------------------------------------------------ */ + + static FFTPlanManager & get(); + + FFTransform & createPlan(Surface & input, SurfaceComplex & output); + void destroyPlan(Surface & input, SurfaceComplex & output); + + /* ------------------------------------------------------------------------ */ + /* Class Members */ + /* ------------------------------------------------------------------------ */ +private: + + std::map,FFTransform *> plans; + + + static FFTPlanManager * singleton; +}; + +/* -------------------------------------------------------------------------- */ +__END_TAMAAS__ +/* -------------------------------------------------------------------------- */ + + +#endif /* FFT_PLAN_MANAGER_H */