Merge pull request #1537 from hzeller/20221117-remove-heterogenous-lookup-ifdefs
Remove unnecessary heterogenous lookup ifdef.
diff --git a/common/util/subcommand.cc b/common/util/subcommand.cc
index 560bd58..9a7652c 100644
--- a/common/util/subcommand.cc
+++ b/common/util/subcommand.cc
@@ -42,19 +42,15 @@
const auto unused_status = Help({}, ins, outs, errs);
return absl::InvalidArgumentError("Unknown subcommand.");
},
- "same as 'help', but exits non-zero to signal a wrong command.\n",
- false}},
- } {}
+ "This is not a valid command.\n", false}},
+ } {
+ command_listing_.emplace_back("help");
+}
const SubcommandEntry& SubcommandRegistry::GetSubcommandEntry(
absl::string_view command) const {
const SubcommandMap& commands(subcommand_map_);
-#if __cplusplus >= 201402L
- const auto iter = commands.find(command); // heterogenous lookup
-#else
- // without heterogenous lookup
- const auto iter = commands.find(std::string(command.begin(), command.end()));
-#endif
+ const auto iter = commands.find(command);
if (iter == commands.end()) {
// Command not found, print help and exit non-zero.
return commands.find("error")->second;
@@ -64,17 +60,14 @@
absl::Status SubcommandRegistry::RegisterCommand(
absl::string_view name, const SubcommandEntry& command) {
- const auto p = subcommand_map_.emplace(
-#if __cplusplus >= 201402L
- name, // heterogenous lookup
-#else
- std::string(name.begin(), name.end()), // without heterogenous lookup
-#endif
- command);
+ const auto p = subcommand_map_.emplace(name, command);
if (!p.second) {
return absl::InvalidArgumentError(absl::StrCat(
"A function named \"", name, "\" has already been registered."));
}
+ if (command.show_in_help) {
+ command_listing_.emplace_back(name);
+ }
return absl::OkStatus();
}
@@ -92,15 +85,7 @@
}
std::string SubcommandRegistry::ListCommands() const {
- const SubcommandMap& commands(subcommand_map_);
- std::vector<absl::string_view> public_commands;
- for (const auto& command : commands) {
- // List only public commands.
- if (command.second.show_in_help) {
- public_commands.emplace_back(command.first);
- }
- }
- return absl::StrCat(" ", absl::StrJoin(public_commands, "\n "), "\n");
+ return absl::StrCat(" ", absl::StrJoin(command_listing_, "\n "), "\n");
}
} // namespace verible
diff --git a/common/util/subcommand.h b/common/util/subcommand.h
index 98fa79b..4c94704 100644
--- a/common/util/subcommand.h
+++ b/common/util/subcommand.h
@@ -92,6 +92,9 @@
// The map of names to functions.
SubcommandMap subcommand_map_;
+
+ // Sequence in which commands have been registered for display purposes.
+ std::vector<std::string> command_listing_;
}; // class SubcommandRegistry
} // namespace verible