diff options
author | Tushar Maheshwari <tushar27192@gmail.com> | 2020-05-09 12:27:16 (GMT) |
---|---|---|
committer | Brad King <brad.king@kitware.com> | 2020-05-12 10:59:00 (GMT) |
commit | 300bf4e94f9c994188e775ec1e2430f6ba200b78 (patch) | |
tree | 4c690d88e04d10d30b28f68c78e25b24c47b4c1a /Source/cmSetTestsPropertiesCommand.cxx | |
parent | 8afac758e6e793a0f004ce2693b0096362391cd9 (diff) | |
download | CMake-300bf4e94f9c994188e775ec1e2430f6ba200b78.zip CMake-300bf4e94f9c994188e775ec1e2430f6ba200b78.tar.gz CMake-300bf4e94f9c994188e775ec1e2430f6ba200b78.tar.bz2 |
set_*_properties: simplify and shorten implementations
Optimize argument copies and range traversal.
Inline the single use file static functions.
Diffstat (limited to 'Source/cmSetTestsPropertiesCommand.cxx')
-rw-r--r-- | Source/cmSetTestsPropertiesCommand.cxx | 75 |
1 files changed, 21 insertions, 54 deletions
diff --git a/Source/cmSetTestsPropertiesCommand.cxx b/Source/cmSetTestsPropertiesCommand.cxx index 2e7aeca..c4bff76 100644 --- a/Source/cmSetTestsPropertiesCommand.cxx +++ b/Source/cmSetTestsPropertiesCommand.cxx @@ -2,19 +2,14 @@ file Copyright.txt or https://cmake.org/licensing for details. */ #include "cmSetTestsPropertiesCommand.h" +#include <algorithm> #include <iterator> -#include <cmext/algorithm> - #include "cmExecutionStatus.h" #include "cmMakefile.h" #include "cmStringAlgorithms.h" #include "cmTest.h" -static bool SetOneTest(const std::string& tname, - std::vector<std::string>& propertyPairs, cmMakefile* mf, - std::string& errors); - bool cmSetTestsPropertiesCommand(std::vector<std::string> const& args, cmExecutionStatus& status) { @@ -23,61 +18,33 @@ bool cmSetTestsPropertiesCommand(std::vector<std::string> const& args, return false; } - cmMakefile& mf = status.GetMakefile(); - - // first collect up the list of files - std::vector<std::string> propertyPairs; - int numFiles = 0; - std::vector<std::string>::const_iterator j; - for (j = args.begin(); j != args.end(); ++j) { - if (*j == "PROPERTIES") { - // now loop through the rest of the arguments, new style - ++j; - if (std::distance(j, args.end()) % 2 != 0) { - status.SetError("called with incorrect number of arguments."); - return false; - } - cm::append(propertyPairs, j, args.end()); - break; - } - numFiles++; - } - if (propertyPairs.empty()) { - status.SetError("called with illegal arguments, maybe " - "missing a PROPERTIES specifier?"); + // first identify the properties arguments + auto propsIter = std::find(args.begin(), args.end(), "PROPERTIES"); + if (propsIter == args.end() || propsIter + 1 == args.end()) { + status.SetError("called with illegal arguments, maybe missing a " + "PROPERTIES specifier?"); return false; } - // now loop over all the targets - int i; - for (i = 0; i < numFiles; ++i) { - std::string errors; - bool ret = SetOneTest(args[i], propertyPairs, &mf, errors); - if (!ret) { - status.SetError(errors); - return ret; - } + if (std::distance(propsIter, args.end()) % 2 != 1) { + status.SetError("called with incorrect number of arguments."); + return false; } - return true; -} - -static bool SetOneTest(const std::string& tname, - std::vector<std::string>& propertyPairs, cmMakefile* mf, - std::string& errors) -{ - if (cmTest* test = mf->GetTest(tname)) { - // now loop through all the props and set them - unsigned int k; - for (k = 0; k < propertyPairs.size(); k = k + 2) { - if (!propertyPairs[k].empty()) { - test->SetProperty(propertyPairs[k], propertyPairs[k + 1].c_str()); + // loop over all the tests + for (const std::string& tname : cmStringRange{ args.begin(), propsIter }) { + if (cmTest* test = status.GetMakefile().GetTest(tname)) { + // loop through all the props and set them + for (auto k = propsIter + 1; k != args.end(); k += 2) { + if (!k->empty()) { + test->SetProperty(*k, (k + 1)->c_str()); + } } + } else { + status.SetError( + cmStrCat("Can not find test to add properties to: ", tname)); + return false; } - } else { - errors = cmStrCat("Can not find test to add properties to: ", tname); - return false; } - return true; } |