Jelajahi Sumber

Merge topic 'cmDefinitions_cleanups'

1a47d368d8 cmDefinitions: Cleanups and optimizations

Acked-by: Kitware Robot <[email protected]>
Merge-request: !3666
Brad King 6 tahun lalu
induk
melakukan
1263b0884b
2 mengubah file dengan 42 tambahan dan 35 penghapusan
  1. 32 29
      Source/cmDefinitions.cxx
  2. 10 6
      Source/cmDefinitions.h

+ 32 - 29
Source/cmDefinitions.cxx

@@ -2,8 +2,11 @@
    file Copyright.txt or https://cmake.org/licensing for details.  */
 #include "cmDefinitions.h"
 
+#include "cm_string_view.hxx"
+
 #include <assert.h>
-#include <set>
+#include <functional>
+#include <unordered_set>
 #include <utility>
 
 cmDefinitions::Def cmDefinitions::NoDef;
@@ -14,7 +17,7 @@ cmDefinitions::Def const& cmDefinitions::GetInternal(const std::string& key,
 {
   assert(begin != end);
   {
-    MapType::iterator it = begin->Map.find(key);
+    auto it = begin->Map.find(key);
     if (it != begin->Map.end()) {
       it->second.Used = true;
       return it->second;
@@ -56,33 +59,10 @@ bool cmDefinitions::HasKey(const std::string& key, StackIter begin,
   return false;
 }
 
-void cmDefinitions::Set(const std::string& key, cm::string_view value)
-{
-  this->Map[key] = Def(value);
-}
-
-void cmDefinitions::Unset(const std::string& key)
-{
-  this->Map[key] = Def();
-}
-
-std::vector<std::string> cmDefinitions::UnusedKeys() const
-{
-  std::vector<std::string> keys;
-  keys.reserve(this->Map.size());
-  // Consider local definitions.
-  for (auto const& mi : this->Map) {
-    if (!mi.second.Used) {
-      keys.push_back(mi.first);
-    }
-  }
-  return keys;
-}
-
 cmDefinitions cmDefinitions::MakeClosure(StackIter begin, StackIter end)
 {
   cmDefinitions closure;
-  std::set<std::string> undefined;
+  std::unordered_set<cm::string_view> undefined;
   for (StackIter it = begin; it != end; ++it) {
     // Consider local definitions.
     for (auto const& mi : it->Map) {
@@ -92,7 +72,7 @@ cmDefinitions cmDefinitions::MakeClosure(StackIter begin, StackIter end)
         if (mi.second.Exists) {
           closure.Map.insert(mi);
         } else {
-          undefined.insert(mi.first);
+          undefined.emplace(mi.first);
         }
       }
     }
@@ -104,13 +84,13 @@ std::vector<std::string> cmDefinitions::ClosureKeys(StackIter begin,
                                                     StackIter end)
 {
   std::vector<std::string> defined;
-  std::set<std::string> bound;
+  std::unordered_set<cm::string_view> bound;
 
   for (StackIter it = begin; it != end; ++it) {
     defined.reserve(defined.size() + it->Map.size());
     for (auto const& mi : it->Map) {
       // Use this key if it is not already set or unset.
-      if (bound.insert(mi.first).second && mi.second.Exists) {
+      if (bound.emplace(mi.first).second && mi.second.Exists) {
         defined.push_back(mi.first);
       }
     }
@@ -118,3 +98,26 @@ std::vector<std::string> cmDefinitions::ClosureKeys(StackIter begin,
 
   return defined;
 }
+
+void cmDefinitions::Set(const std::string& key, cm::string_view value)
+{
+  this->Map[key] = Def(value);
+}
+
+void cmDefinitions::Unset(const std::string& key)
+{
+  this->Map[key] = Def();
+}
+
+std::vector<std::string> cmDefinitions::UnusedKeys() const
+{
+  std::vector<std::string> keys;
+  keys.reserve(this->Map.size());
+  // Consider local definitions.
+  for (auto const& mi : this->Map) {
+    if (!mi.second.Used) {
+      keys.push_back(mi.first);
+    }
+  }
+  return keys;
+}

+ 10 - 6
Source/cmDefinitions.h

@@ -25,6 +25,8 @@ class cmDefinitions
   typedef cmLinkedTree<cmDefinitions>::iterator StackIter;
 
 public:
+  // -- Static member functions
+
   static const std::string* Get(const std::string& key, StackIter begin,
                                 StackIter end);
 
@@ -32,18 +34,21 @@ public:
 
   static bool HasKey(const std::string& key, StackIter begin, StackIter end);
 
+  static std::vector<std::string> ClosureKeys(StackIter begin, StackIter end);
+
+  static cmDefinitions MakeClosure(StackIter begin, StackIter end);
+
+  // -- Member functions
+
   /** Set a value associated with a key.  */
   void Set(const std::string& key, cm::string_view value);
 
   /** Unset a definition.  */
   void Unset(const std::string& key);
 
+  /** List of unused keys.  */
   std::vector<std::string> UnusedKeys() const;
 
-  static std::vector<std::string> ClosureKeys(StackIter begin, StackIter end);
-
-  static cmDefinitions MakeClosure(StackIter begin, StackIter end);
-
 private:
   /** String with existence boolean.  */
   struct Def
@@ -61,8 +66,7 @@ private:
   };
   static Def NoDef;
 
-  typedef std::unordered_map<std::string, Def> MapType;
-  MapType Map;
+  std::unordered_map<std::string, Def> Map;
 
   static Def const& GetInternal(const std::string& key, StackIter begin,
                                 StackIter end, bool raise);