summaryrefslogtreecommitdiffstats
path: root/Source/cmSetTestsPropertiesCommand.cxx
diff options
context:
space:
mode:
authorTushar Maheshwari <tushar27192@gmail.com>2020-05-09 12:27:16 (GMT)
committerBrad King <brad.king@kitware.com>2020-05-12 10:59:00 (GMT)
commit300bf4e94f9c994188e775ec1e2430f6ba200b78 (patch)
tree4c690d88e04d10d30b28f68c78e25b24c47b4c1a /Source/cmSetTestsPropertiesCommand.cxx
parent8afac758e6e793a0f004ce2693b0096362391cd9 (diff)
downloadCMake-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.cxx75
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;
}