summaryrefslogtreecommitdiffstats
path: root/Source
diff options
context:
space:
mode:
Diffstat (limited to 'Source')
-rw-r--r--Source/cmDefinitions.cxx9
-rw-r--r--Source/cmDefinitions.h38
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;
};