summaryrefslogtreecommitdiffstats
path: root/Source/cmWindowsRegistry.h
diff options
context:
space:
mode:
Diffstat (limited to 'Source/cmWindowsRegistry.h')
-rw-r--r--Source/cmWindowsRegistry.h29
1 files changed, 27 insertions, 2 deletions
diff --git a/Source/cmWindowsRegistry.h b/Source/cmWindowsRegistry.h
index e04ce87..bb9090e 100644
--- a/Source/cmWindowsRegistry.h
+++ b/Source/cmWindowsRegistry.h
@@ -7,6 +7,7 @@
#include <cm/optional>
#include <cm/string_view>
+#include <cmext/enum_set>
#include <cmext/string_view>
class cmMakefile;
@@ -14,8 +15,6 @@ class cmMakefile;
class cmWindowsRegistry
{
public:
- cmWindowsRegistry(cmMakefile&);
-
enum class View
{
Both,
@@ -27,6 +26,25 @@ public:
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
@@ -48,6 +66,12 @@ public:
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:
@@ -55,6 +79,7 @@ private:
std::vector<View> ComputeViews(View view);
int TargetSize = 0;
+ ValueTypeSet SupportedTypes = AllTypes;
#endif
std::string LastError;
};