summaryrefslogtreecommitdiffstats
path: root/Source
diff options
context:
space:
mode:
authorSebastian Holtermann <sebholt@xwmw.org>2019-07-19 08:14:59 (GMT)
committerSebastian Holtermann <sebholt@xwmw.org>2019-07-24 09:11:25 (GMT)
commite268840c0a5db59f97c0fbc77aaae621520b83a3 (patch)
tree780a80db3386e94e1957f3b3a25f8aac5a264106 /Source
parent451fd329a88f26bacce7e9939ef767876b385050 (diff)
downloadCMake-e268840c0a5db59f97c0fbc77aaae621520b83a3.zip
CMake-e268840c0a5db59f97c0fbc77aaae621520b83a3.tar.gz
CMake-e268840c0a5db59f97c0fbc77aaae621520b83a3.tar.bz2
cmDefinitions: Add Unset and cm::string_view based Set methods
- The `cmDefinitions::Def` struct is simplified by removing an unused constructor and the `std_string` type definition. The std::string value becomes a member variable instead of being derived from. - The `cmDefinitions::Unset` method is added that unsets a definition. It has the same functionality as calling `cmDefinitions::Set` with a `nullptr` value argument, - The `cmDefinitions::Set` method gets an overloaded version that takes a `cm::string_view` as value argument. - The originl `cmDefinitions::Set` method with `const char*` argument is refactored to either call the `cm::string_view` based `cmDefinitions::Set` overload or `cmDefinitions::Unset`, depending on whether the value `const char*` is a nullptr (`Unset`) or not (`Set`).
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;
};