diff options
Diffstat (limited to 'Source')
-rw-r--r-- | Source/cmDefinitions.cxx | 9 | ||||
-rw-r--r-- | Source/cmDefinitions.h | 38 |
2 files changed, 30 insertions, 17 deletions
diff --git a/Source/cmDefinitions.cxx b/Source/cmDefinitions.cxx index 35cdc5a..42e70d6 100644 --- a/Source/cmDefinitions.cxx +++ b/Source/cmDefinitions.cxx @@ -36,7 +36,7 @@ const std::string* cmDefinitions::Get(const std::string& key, StackIter begin, StackIter end) { Def const& def = cmDefinitions::GetInternal(key, begin, end, false); - return def.Exists ? &def : nullptr; + return def.Exists ? &def.Value : nullptr; } void cmDefinitions::Raise(const std::string& key, StackIter begin, @@ -56,11 +56,16 @@ bool cmDefinitions::HasKey(const std::string& key, StackIter begin, return false; } -void cmDefinitions::Set(const std::string& key, const char* value) +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; diff --git a/Source/cmDefinitions.h b/Source/cmDefinitions.h index 6c252be..b6a08bc 100644 --- a/Source/cmDefinitions.h +++ b/Source/cmDefinitions.h @@ -5,12 +5,14 @@ #include "cmConfigure.h" // IWYU pragma: keep +#include "cm_string_view.hxx" + +#include "cmLinkedTree.h" + #include <string> #include <unordered_map> #include <vector> -#include "cmLinkedTree.h" - /** \class cmDefinitions * \brief Store a scope of variable definitions for CMake language. * @@ -31,7 +33,20 @@ public: static bool HasKey(const std::string& key, StackIter begin, StackIter end); /** Set (or unset if null) a value associated with a key. */ - void Set(const std::string& key, const char* value); + void Set(const std::string& key, const char* value) + { + if (value) { + this->Set(key, cm::string_view(value)); + } else { + this->Unset(key); + } + } + + /** 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); std::vector<std::string> UnusedKeys() const; @@ -40,24 +55,17 @@ public: static cmDefinitions MakeClosure(StackIter begin, StackIter end); private: - // String with existence boolean. - struct Def : public std::string + /** String with existence boolean. */ + struct Def { - private: - typedef std::string std_string; - public: Def() = default; - Def(const char* v) - : std_string(v ? v : "") - , Exists(v ? true : false) - { - } - Def(const std_string& v) - : std_string(v) + Def(cm::string_view value) + : Value(value) , Exists(true) { } + std::string Value; bool Exists = false; bool Used = false; }; |