MultiCommand: Simplify construction

This commit is contained in:
Eelco Dolstra 2018-11-22 15:59:52 +01:00
parent aa0e2a2e70
commit 15a16e5c05
No known key found for this signature in database
GPG key ID: 8170B4726D7198DE
3 changed files with 15 additions and 8 deletions

View file

@ -4,7 +4,7 @@
namespace nix {
Commands * RegisterCommand::commands = 0;
std::vector<ref<Command>> * RegisterCommand::commands = 0;
void Command::printHelp(const string & programName, std::ostream & out)
{
@ -21,9 +21,11 @@ void Command::printHelp(const string & programName, std::ostream & out)
}
}
MultiCommand::MultiCommand(const Commands & _commands)
: commands(_commands)
MultiCommand::MultiCommand(const std::vector<ref<Command>> & _commands)
{
for (auto & command : _commands)
commands.emplace(command->name(), command);
expectedArgs.push_back(ExpectedArg{"command", 1, true, [=](std::vector<std::string> ss) {
assert(!command);
auto i = commands.find(ss[0]);

View file

@ -173,7 +173,7 @@ public:
std::shared_ptr<Command> command;
MultiCommand(const Commands & commands);
MultiCommand(const std::vector<ref<Command>> & commands);
void printHelp(const string & programName, std::ostream & out) override;
@ -185,12 +185,12 @@ public:
/* A helper class for registering commands globally. */
struct RegisterCommand
{
static Commands * commands;
static std::vector<ref<Command>> * commands;
RegisterCommand(ref<Command> command)
{
if (!commands) commands = new Commands;
commands->emplace(command->name(), command);
if (!commands) commands = new std::vector<ref<Command>>;
commands->push_back(command);
}
};

View file

@ -57,10 +57,15 @@ struct NixArgs : virtual MultiCommand, virtual MixCommonArgs
"--help-config' for a list of configuration settings.\n";
}
void printHelp(const string & programName, std::ostream & out)
{
MultiCommand::printHelp(programName, out);
std::cout << "\nNote: this program is EXPERIMENTAL and subject to change.\n";
}
void showHelpAndExit()
{
printHelp(programName, std::cout);
std::cout << "\nNote: this program is EXPERIMENTAL and subject to change.\n";
throw Exit();
}
};