| /* Distributed under the OSI-approved BSD 3-Clause License. See accompanying |
| file Copyright.txt or https://cmake.org/licensing for details. */ |
| #pragma once |
| |
| #include "cmConfigure.h" // IWYU pragma: keep |
| |
| #include <cstdint> // IWYU pragma: keep |
| #include <initializer_list> |
| #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; |
| }; |