Refactored command base class for simplicity.
This commit is contained in:
parent
5427876e36
commit
2be3f4256a
@ -17,25 +17,28 @@ template<class... OptionGroups>
|
|||||||
class Command
|
class Command
|
||||||
{
|
{
|
||||||
protected:
|
protected:
|
||||||
void addOptionGroupsTo(cxxopts::Options &options)
|
Command(cxxopts::Options &&options)
|
||||||
|
: m_options{options}
|
||||||
{
|
{
|
||||||
forEach(m_optionGroups,
|
forEach(m_optionGroups,
|
||||||
[&](auto &optionGroup)
|
[&](auto &optionGroup)
|
||||||
{
|
{
|
||||||
optionGroup.addTo(options);
|
optionGroup.addTo(m_options);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
void parseOptionGroups(cxxopts::Options &options)
|
void parseOptions(int argc, char **argv)
|
||||||
{
|
{
|
||||||
|
m_options.parse(argc, argv);
|
||||||
|
|
||||||
forEach(m_optionGroups,
|
forEach(m_optionGroups,
|
||||||
[&](auto &optionGroup)
|
[&](auto &optionGroup)
|
||||||
{
|
{
|
||||||
optionGroup.parse(options);
|
optionGroup.parse(m_options);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
void printHelp(cxxopts::Options &options)
|
void printHelp()
|
||||||
{
|
{
|
||||||
const auto numberOfOptionGroups = std::tuple_size<std::decay_t<decltype(m_optionGroups)>>();
|
const auto numberOfOptionGroups = std::tuple_size<std::decay_t<decltype(m_optionGroups)>>();
|
||||||
|
|
||||||
@ -49,9 +52,10 @@ class Command
|
|||||||
optionGroupNames.emplace_back(optionGroup.Name);
|
optionGroupNames.emplace_back(optionGroup.Name);
|
||||||
});
|
});
|
||||||
|
|
||||||
std::cout << options.help(optionGroupNames) << std::endl;
|
std::cout << m_options.help(optionGroupNames) << std::endl;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
cxxopts::Options m_options;
|
||||||
std::tuple<OptionGroups...> m_optionGroups;
|
std::tuple<OptionGroups...> m_optionGroups;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -13,6 +13,8 @@
|
|||||||
class CommandTranslate : public Command<OptionGroupBasic, OptionGroupOutput, OptionGroupParser>
|
class CommandTranslate : public Command<OptionGroupBasic, OptionGroupOutput, OptionGroupParser>
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
CommandTranslate();
|
||||||
|
|
||||||
int run(int argc, char **argv);
|
int run(int argc, char **argv);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -32,13 +32,16 @@
|
|||||||
//
|
//
|
||||||
////////////////////////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
CommandTranslate::CommandTranslate()
|
||||||
|
: Command(cxxopts::Options("plasp translate", "Translate PDDL to ASP."))
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
int CommandTranslate::run(int argc, char **argv)
|
int CommandTranslate::run(int argc, char **argv)
|
||||||
{
|
{
|
||||||
cxxopts::Options options("plasp translate", "Translate PDDL to ASP.");
|
parseOptions(argc, argv);
|
||||||
|
|
||||||
addOptionGroupsTo(options);
|
|
||||||
options.parse(argc, argv);
|
|
||||||
parseOptionGroups(options);
|
|
||||||
|
|
||||||
const auto &basicOptions = std::get<OptionGroupBasic>(m_optionGroups);
|
const auto &basicOptions = std::get<OptionGroupBasic>(m_optionGroups);
|
||||||
const auto &outputOptions = std::get<OptionGroupOutput>(m_optionGroups);
|
const auto &outputOptions = std::get<OptionGroupOutput>(m_optionGroups);
|
||||||
@ -46,7 +49,7 @@ int CommandTranslate::run(int argc, char **argv)
|
|||||||
|
|
||||||
if (basicOptions.help)
|
if (basicOptions.help)
|
||||||
{
|
{
|
||||||
printHelp(options);
|
printHelp();
|
||||||
return EXIT_SUCCESS;
|
return EXIT_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -102,7 +105,7 @@ int CommandTranslate::run(int argc, char **argv)
|
|||||||
{
|
{
|
||||||
logger.log(colorlog::Priority::Error, "unknown input language");
|
logger.log(colorlog::Priority::Error, "unknown input language");
|
||||||
std::cout << std::endl;
|
std::cout << std::endl;
|
||||||
printHelp(options);
|
printHelp();
|
||||||
return EXIT_FAILURE;
|
return EXIT_FAILURE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user