Merge pull request #162 from skrobinson/wip-port-aayush749-fixes

Port aayush749 fixes
This commit is contained in:
Pranav 2022-04-25 16:17:16 -07:00 committed by GitHub
commit b9dd1ef8e3
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -958,7 +958,10 @@ public:
*/ */
void parse_args(const std::vector<std::string> &arguments) { void parse_args(const std::vector<std::string> &arguments) {
parse_args_internal(arguments); parse_args_internal(arguments);
parse_args_validate(); // Check if all arguments are parsed
for ([[maybe_unused]] const auto& [unused, argument] : m_argument_map) {
argument->validate();
}
} }
/* Main entry point for parsing command-line arguments using this /* Main entry point for parsing command-line arguments using this
@ -1134,31 +1137,16 @@ private:
m_is_parsed = true; m_is_parsed = true;
} }
/*
* @throws std::runtime_error in case of any invalid argument
*/
void parse_args_validate() {
// Check if all arguments are parsed
std::for_each(std::begin(m_argument_map), std::end(m_argument_map),
[](const auto &pair) {
const auto &argument = pair.second;
argument->validate();
});
}
// Used by print_help. // Used by print_help.
std::size_t get_length_of_longest_argument() const { std::size_t get_length_of_longest_argument() const {
if (m_argument_map.empty()) { if (m_argument_map.empty()) {
return 0; return 0;
} }
std::vector<std::size_t> argument_lengths(m_argument_map.size()); std::size_t max_size = 0;
std::transform(std::begin(m_argument_map), std::end(m_argument_map), for ([[maybe_unused]] const auto& [unused, argument] : m_argument_map) {
std::begin(argument_lengths), [](const auto &pair) { max_size = std::max(max_size, argument->get_arguments_length());
const auto &argument = pair.second; }
return argument->get_arguments_length(); return max_size;
});
return *std::max_element(std::begin(argument_lengths),
std::end(argument_lengths));
} }
using list_iterator = std::list<Argument>::iterator; using list_iterator = std::list<Argument>::iterator;