From d5a6a133680e4d5798522a4b29ae6bced1f2db3a Mon Sep 17 00:00:00 2001 From: Regina Pfeifer Date: Fri, 20 Sep 2019 13:27:02 +0200 Subject: cmArgumentParser: Record parsed keywords --- Source/cmArgumentParser.cxx | 6 +++++- Source/cmArgumentParser.h | 21 ++++++++++++++------- 2 files changed, 19 insertions(+), 8 deletions(-) diff --git a/Source/cmArgumentParser.cxx b/Source/cmArgumentParser.cxx index 751d117..4c87177 100644 --- a/Source/cmArgumentParser.cxx +++ b/Source/cmArgumentParser.cxx @@ -61,10 +61,14 @@ void Instance::Bind(MultiStringList& val) void Instance::Consume(cm::string_view arg, void* result, std::vector* unparsedArguments, - std::vector* keywordsMissingValue) + std::vector* keywordsMissingValue, + std::vector* parsedKeywords) { auto const it = this->Bindings.Find(arg); if (it != this->Bindings.end()) { + if (parsedKeywords != nullptr) { + parsedKeywords->emplace_back(arg); + } it->second(*this, result); if (this->ExpectValue && keywordsMissingValue != nullptr) { keywordsMissingValue->emplace_back(arg); diff --git a/Source/cmArgumentParser.h b/Source/cmArgumentParser.h index 6cfe946..e1773b4 100644 --- a/Source/cmArgumentParser.h +++ b/Source/cmArgumentParser.h @@ -45,7 +45,8 @@ public: void Consume(cm::string_view arg, void* result, std::vector* unparsedArguments, - std::vector* keywordsMissingValue); + std::vector* keywordsMissingValue, + std::vector* parsedKeywords); private: ActionMap const& Bindings; @@ -79,21 +80,25 @@ public: template void Parse(Result& result, Range const& args, std::vector* unparsedArguments = nullptr, - std::vector* keywordsMissingValue = nullptr) const + std::vector* keywordsMissingValue = nullptr, + std::vector* parsedKeywords = nullptr) const { ArgumentParser::Instance instance(this->Bindings); for (cm::string_view arg : args) { - instance.Consume(arg, &result, unparsedArguments, keywordsMissingValue); + instance.Consume(arg, &result, unparsedArguments, keywordsMissingValue, + parsedKeywords); } } template Result Parse(Range const& args, std::vector* unparsedArguments = nullptr, - std::vector* keywordsMissingValue = nullptr) const + std::vector* keywordsMissingValue = nullptr, + std::vector* parsedKeywords = nullptr) const { Result result; - this->Parse(result, args, unparsedArguments, keywordsMissingValue); + this->Parse(result, args, unparsedArguments, keywordsMissingValue, + parsedKeywords); return result; } @@ -116,11 +121,13 @@ public: template void Parse(Range const& args, std::vector* unparsedArguments = nullptr, - std::vector* keywordsMissingValue = nullptr) const + std::vector* keywordsMissingValue = nullptr, + std::vector* parsedKeywords = nullptr) const { ArgumentParser::Instance instance(this->Bindings); for (cm::string_view arg : args) { - instance.Consume(arg, nullptr, unparsedArguments, keywordsMissingValue); + instance.Consume(arg, nullptr, unparsedArguments, keywordsMissingValue, + parsedKeywords); } } -- cgit v0.12