diff options
Diffstat (limited to 'Source/cmWindowsRegistry.h')
-rw-r--r-- | Source/cmWindowsRegistry.h | 85 |
1 files changed, 85 insertions, 0 deletions
diff --git a/Source/cmWindowsRegistry.h b/Source/cmWindowsRegistry.h new file mode 100644 index 0000000..bb9090e --- /dev/null +++ b/Source/cmWindowsRegistry.h @@ -0,0 +1,85 @@ +/* Distributed under the OSI-approved BSD 3-Clause License. See accompanying + file Copyright.txt or https://cmake.org/licensing for details. */ +#pragma once + +#include <string> +#include <vector> + +#include <cm/optional> +#include <cm/string_view> +#include <cmext/enum_set> +#include <cmext/string_view> + +class cmMakefile; + +class cmWindowsRegistry +{ +public: + enum class View + { + Both, + Target, + Host, + Reg64_32, + Reg32_64, + Reg32, + Reg64 + }; + + // Registry supported types + enum class ValueType : std::uint8_t + { + Reg_SZ, + Reg_EXPAND_SZ, + Reg_MULTI_SZ, + Reg_DWORD, + Reg_QWORD + }; + using ValueTypeSet = cm::enum_set<ValueType>; + + // All types as defined by enum ValueType + static const ValueTypeSet AllTypes; + // same as AllTYpes but without type REG_MULTI_SZ + static const ValueTypeSet SimpleTypes; + + cmWindowsRegistry(cmMakefile&, + const ValueTypeSet& supportedTypes = AllTypes); + + // Helper routine to convert string to enum value + static cm::optional<View> ToView(cm::string_view name); + // Helper routine to convert enum to string + static cm::string_view FromView(View view); + + cm::optional<std::string> ReadValue(cm::string_view key, + View view = View::Both, + cm::string_view separator = "\0"_s) + { + return this->ReadValue(key, ""_s, view, separator); + } + cm::optional<std::string> ReadValue(cm::string_view key, + cm::string_view name, + View view = View::Both, + cm::string_view separator = "\0"_s); + + cm::optional<std::vector<std::string>> GetValueNames(cm::string_view key, + View view = View::Both); + cm::optional<std::vector<std::string>> GetSubKeys(cm::string_view key, + View view = View::Both); + + // Expand an expression which may contains multiple references + // to registry keys. + // Depending of the view specified, one or two expansions can be done. + cm::optional<std::vector<std::string>> ExpandExpression( + cm::string_view expression, View view, cm::string_view separator = "\0"_s); + + cm::string_view GetLastError() const; + +private: +#if defined(_WIN32) && !defined(__CYGWIN__) + std::vector<View> ComputeViews(View view); + + int TargetSize = 0; + ValueTypeSet SupportedTypes = AllTypes; +#endif + std::string LastError; +}; |