| /* Distributed under the OSI-approved BSD 3-Clause License. See accompanying | |
| file Copyright.txt or https://cmake.org/licensing for details. */ | |
| #include "cmSubcommandTable.h" | |
| #include <algorithm> | |
| #include "cmExecutionStatus.h" | |
| #include "cmStringAlgorithms.h" | |
| cmSubcommandTable::cmSubcommandTable(std::initializer_list<InitElem> init) | |
| : Impl(init.begin(), init.end()) | |
| { | |
| std::sort(this->Impl.begin(), this->Impl.end(), | |
| [](Elem const& left, Elem const& right) { | |
| return left.first < right.first; | |
| }); | |
| } | |
| bool cmSubcommandTable::operator()(cm::string_view key, | |
| std::vector<std::string> const& args, | |
| cmExecutionStatus& status) const | |
| { | |
| auto const it = std::lower_bound( | |
| this->Impl.begin(), this->Impl.end(), key, | |
| [](Elem const& elem, cm::string_view k) { return elem.first < k; }); | |
| if (it != this->Impl.end() && it->first == key) { | |
| return it->second(args, status); | |
| } | |
| status.SetError(cmStrCat("does not recognize sub-command ", key)); | |
| return false; | |
| } |