/*! * \file OxFactoryOfCalculators.h * \author Konrad Werys * \date 2018/08/18 */ #ifndef Tomato_OXFACTORYOFCalculators_H #define Tomato_OXFACTORYOFCalculators_H #include "CmakeConfigForTomato.h" #include "OxCalculatorT1Molli.h" #ifdef USE_PRIVATE_NR2 #include "OxCalculatorT1Shmolli.h" #include "OxCalculatorT1ShmolliOriginal.h" #endif namespace Ox { template struct TomatoOptions; #ifdef USE_PRIVATE_NR2 static const char *calculatorsTypeNames[] = { "T1_MOLLI", "T1_SHMOLLI", "T1_SHMOLLI_original", }; enum calculatorsType_t { T1_MOLLI = 0, T1_SHMOLLI = 1, T1_SHMOLLI_original = 2, lastCalculatorType = T1_SHMOLLI_original }; #else static const char *calculatorsTypeNames[] = { "T1_MOLLI", }; enum calculatorsType_t { T1_MOLLI = 0, lastCalculatorType = T1_MOLLI }; #endif template class FactoryOfCalculators { public: static CalculatorT1* newByFactory(TomatoOptions *opts){ CalculatorT1 *calculatorT1 = 0; //nullpointer switch (opts->parameter_to_map){ case T1_MOLLI: { calculatorT1 = new CalculatorT1Molli(); break; } #ifdef USE_PRIVATE_NR2 case T1_SHMOLLI: { calculatorT1 = new CalculatorT1Shmolli(); break; } case T1_SHMOLLI_original: { calculatorT1 = new CalculatorT1ShmolliOriginal(); break; } #endif } calculatorT1->setMeanCutOff(opts->mean_cut_off); return calculatorT1; } }; } // namespace Ox #endif //Tomato_OXFACTORYOFCalculators_H