Modify ArgumentParser::get_length_of_longest_argument method run in O(1) space

Closes #124

Reported-by: Aayush Anand <aaayushanand5@gmail.com>
Signed-off-by: Sean Robinson <sean.robinson@scottsdalecc.edu>
This commit is contained in:
Sean Robinson 2022-02-28 13:20:08 -07:00
parent 0d868fdca8
commit 063d708c3e

View File

@ -1149,14 +1149,11 @@ private:
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 (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;