Program Listing for File ConfiguredModule.cpp

Return to documentation for file (core/src/ConfiguredModule.cpp)

#include "include/ConfiguredModule.hpp"

#include "include/Configurator.hpp"
#include "include/NextsimModule.hpp"

#include <boost/program_options.hpp>
#include <stdexcept>

namespace Nextsim {

const std::string ConfiguredModule::MODULE_PREFIX = "Modules";

std::string ConfiguredModule::addPrefix(const std::string& moduleName)
{
    return MODULE_PREFIX + "." + moduleName;
}

std::string ConfiguredModule::getImpl(const std::string& module)
{
    boost::program_options::options_description opt;

    opt.add_options()(addPrefix(module).c_str(),
        boost::program_options::value<std::string>()->default_value(""),
        ("Load an implementation of " + module).c_str());

    std::string implString = Configurator::parse(opt)[addPrefix(module)].as<std::string>();
    // Only do anything if the retrieved option is not the default value
    return implString;
}

ConfigMap ConfiguredModule::getAllModuleConfigurations()
{
    ConfigMap iiMap;
    for (const auto& moduleImpl : Module::ImplementationNames::getAll()) {
        iiMap[moduleImpl.first] = moduleImpl.second;
    }
    return iiMap;
}
} /* namespace Nextsim */