Browse Source

cmPropertyMap: Add GetList method

Sebastian Holtermann 6 years ago
parent
commit
026f65d284
4 changed files with 20 additions and 8 deletions
  1. 2 2
      Source/cmJsonObjects.cxx
  2. 10 0
      Source/cmPropertyMap.cxx
  3. 4 0
      Source/cmPropertyMap.h
  4. 4 6
      Source/cmTestGenerator.cxx

+ 2 - 2
Source/cmJsonObjects.cxx

@@ -363,12 +363,12 @@ static Json::Value DumpCTestInfo(cmLocalGenerator* lg, cmTest* testInfo,
 
   // Build up the list of properties that may have been specified
   Json::Value properties = Json::arrayValue;
-  for (auto& prop : testInfo->GetProperties()) {
+  for (auto& prop : testInfo->GetProperties().GetList()) {
     Json::Value entry = Json::objectValue;
     entry[kKEY_KEY] = prop.first;
 
     // Remove config variables from the value too.
-    auto cge_value = ge.Parse(prop.second.GetValue());
+    auto cge_value = ge.Parse(prop.second);
     const std::string& processed_value = cge_value->Evaluate(lg, config);
     entry[kVALUE_KEY] = processed_value;
     properties.append(entry);

+ 10 - 0
Source/cmPropertyMap.cxx

@@ -60,3 +60,13 @@ std::vector<std::string> cmPropertyMap::GetKeys() const
   }
   return keyList;
 }
+
+std::vector<std::pair<std::string, std::string>> cmPropertyMap::GetList() const
+{
+  std::vector<std::pair<std::string, std::string>> kvList;
+  kvList.reserve(this->size());
+  for (auto const& item : *this) {
+    kvList.emplace_back(item.first, item.second.GetValue());
+  }
+  return kvList;
+}

+ 4 - 0
Source/cmPropertyMap.h

@@ -9,6 +9,7 @@
 
 #include <map>
 #include <string>
+#include <utility>
 #include <vector>
 
 class cmPropertyMap : public std::map<std::string, cmProperty>
@@ -27,6 +28,9 @@ public:
   // -- Lists
   //! Get a sorted list of property keys
   std::vector<std::string> GetKeys() const;
+
+  //! Get a sorted by key list of property key,value pairs
+  std::vector<std::pair<std::string, std::string>> GetList() const;
 };
 
 #endif

+ 4 - 6
Source/cmTestGenerator.cxx

@@ -117,13 +117,12 @@ void cmTestGenerator::GenerateScriptForConfig(std::ostream& os,
   os << ")\n";
 
   // Output properties for the test.
-  cmPropertyMap& pm = this->Test->GetProperties();
   os << indent << "set_tests_properties(" << this->Test->GetName()
      << " PROPERTIES ";
-  for (auto const& i : pm) {
+  for (auto const& i : this->Test->GetProperties().GetList()) {
     os << " " << i.first << " "
        << cmOutputConverter::EscapeForCMake(
-            ge.Parse(i.second.GetValue())->Evaluate(this->LG, config));
+            ge.Parse(i.second)->Evaluate(this->LG, config));
   }
   this->GenerateInternalProperties(os);
   os << ")" << std::endl;
@@ -173,12 +172,11 @@ void cmTestGenerator::GenerateOldStyle(std::ostream& fout, Indent indent)
   fout << ")" << std::endl;
 
   // Output properties for the test.
-  cmPropertyMap& pm = this->Test->GetProperties();
   fout << indent << "set_tests_properties(" << this->Test->GetName()
        << " PROPERTIES ";
-  for (auto const& i : pm) {
+  for (auto const& i : this->Test->GetProperties().GetList()) {
     fout << " " << i.first << " "
-         << cmOutputConverter::EscapeForCMake(i.second.GetValue());
+         << cmOutputConverter::EscapeForCMake(i.second);
   }
   this->GenerateInternalProperties(fout);
   fout << ")" << std::endl;