/*! * \file OxFactoryOfFunctions.h * \author Konrad Werys * \date 2018/08/18 */ #ifndef Tomato_OXFACTORYOFFUNCTIONS_H #define Tomato_OXFACTORYOFFUNCTIONS_H #include "CmakeConfigForTomato.h" #include "OxFunctionsT1Basic.h" #ifdef USE_PRIVATE_NR2 #include "OxFunctionsT1Shmolli.h" #endif namespace Ox { template struct TomatoOptions; static const char *functionsTypeNames[] = { "FunctionsBasic", "FunctionsShmolli", }; enum functionsType_t { FunctionsBasic = 0, FunctionsShmolli = 1, lastFunctorType = FunctionsShmolli }; static int functionsAvailability[] = { 1, //FunctionsBasic #ifdef USE_PRIVATE_NR2 1 // FunctionsShmolli #else 0 // FunctionsShmolli #endif }; template class FactoryOfFunctions { public: static FunctionsT1* newByFactory(TomatoOptions *opts){ switch (opts->functions_type){ case FunctionsBasic: { return new FunctionsT1Basic(); } #ifdef USE_PRIVATE_NR2 case FunctionsShmolli: { return new FunctionsT1Shmolli(); } #endif default: throw std::runtime_error("functions_type not available"); } } static void disp(int functions_type = -1){ if (functions_type >= 0) { printf("%-30s%-20s", " functions_type: ", functionsTypeNames[functions_type]); } printf("options: [ "); for (int i = 0; i < lastFunctorType+1; i++){ if(functionsAvailability[i]){ printf("%s ", functionsTypeNames[i]); } } printf("] \n"); } }; } // namespace Ox #endif //Tomato_OXFACTORYOFFUNCTIONS_H