/* 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 // IWYU pragma: keep #include #include #include #include #include #include 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; // 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 ToView(cm::string_view name); // Helper routine to convert enum to string static cm::string_view FromView(View view); cm::optional ReadValue(cm::string_view key, View view = View::Both, cm::string_view separator = "\0"_s) { return this->ReadValue(key, ""_s, view, separator); } cm::optional ReadValue(cm::string_view key, cm::string_view name, View view = View::Both, cm::string_view separator = "\0"_s); cm::optional> GetValueNames(cm::string_view key, View view = View::Both); cm::optional> 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> 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 ComputeViews(View view); int TargetSize = 0; ValueTypeSet SupportedTypes = AllTypes; #endif std::string LastError; };