mirror of
https://github.com/Kitware/CMake.git
synced 2025-10-16 22:37:30 +08:00
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`).
This commit is contained in:
@@ -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;
|
||||
|
@@ -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;
|
||||
};
|
||||
|
Reference in New Issue
Block a user