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)
|
StackIter end)
|
||||||
{
|
{
|
||||||
Def const& def = cmDefinitions::GetInternal(key, begin, end, false);
|
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,
|
void cmDefinitions::Raise(const std::string& key, StackIter begin,
|
||||||
@@ -56,11 +56,16 @@ bool cmDefinitions::HasKey(const std::string& key, StackIter begin,
|
|||||||
return false;
|
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);
|
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> cmDefinitions::UnusedKeys() const
|
||||||
{
|
{
|
||||||
std::vector<std::string> keys;
|
std::vector<std::string> keys;
|
||||||
|
@@ -5,12 +5,14 @@
|
|||||||
|
|
||||||
#include "cmConfigure.h" // IWYU pragma: keep
|
#include "cmConfigure.h" // IWYU pragma: keep
|
||||||
|
|
||||||
|
#include "cm_string_view.hxx"
|
||||||
|
|
||||||
|
#include "cmLinkedTree.h"
|
||||||
|
|
||||||
#include <string>
|
#include <string>
|
||||||
#include <unordered_map>
|
#include <unordered_map>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
|
||||||
#include "cmLinkedTree.h"
|
|
||||||
|
|
||||||
/** \class cmDefinitions
|
/** \class cmDefinitions
|
||||||
* \brief Store a scope of variable definitions for CMake language.
|
* \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);
|
static bool HasKey(const std::string& key, StackIter begin, StackIter end);
|
||||||
|
|
||||||
/** Set (or unset if null) a value associated with a key. */
|
/** 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;
|
std::vector<std::string> UnusedKeys() const;
|
||||||
|
|
||||||
@@ -40,24 +55,17 @@ public:
|
|||||||
static cmDefinitions MakeClosure(StackIter begin, StackIter end);
|
static cmDefinitions MakeClosure(StackIter begin, StackIter end);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
// String with existence boolean.
|
/** String with existence boolean. */
|
||||||
struct Def : public std::string
|
struct Def
|
||||||
{
|
{
|
||||||
private:
|
|
||||||
typedef std::string std_string;
|
|
||||||
|
|
||||||
public:
|
public:
|
||||||
Def() = default;
|
Def() = default;
|
||||||
Def(const char* v)
|
Def(cm::string_view value)
|
||||||
: std_string(v ? v : "")
|
: Value(value)
|
||||||
, Exists(v ? true : false)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
Def(const std_string& v)
|
|
||||||
: std_string(v)
|
|
||||||
, Exists(true)
|
, Exists(true)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
std::string Value;
|
||||||
bool Exists = false;
|
bool Exists = false;
|
||||||
bool Used = false;
|
bool Used = false;
|
||||||
};
|
};
|
||||||
|
Reference in New Issue
Block a user