diff options
author | Sebastian Holtermann <sebholt@xwmw.org> | 2019-07-19 08:14:59 (GMT) |
---|---|---|
committer | Sebastian Holtermann <sebholt@xwmw.org> | 2019-07-24 09:11:25 (GMT) |
commit | e268840c0a5db59f97c0fbc77aaae621520b83a3 (patch) | |
tree | 780a80db3386e94e1957f3b3a25f8aac5a264106 /Source/cmDefinitions.h | |
parent | 451fd329a88f26bacce7e9939ef767876b385050 (diff) | |
download | CMake-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/cmDefinitions.h')
-rw-r--r-- | Source/cmDefinitions.h | 38 |
1 files changed, 23 insertions, 15 deletions
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; }; |