diff options
author | Spartan322 <Megacake1234@gmail.com> | 2023-12-04 19:10:41 +0100 |
---|---|---|
committer | Spartan322 <Megacake1234@gmail.com> | 2023-12-04 20:54:28 +0100 |
commit | 7019dccc90711ae9ad1a8f97933c3703bb32e542 (patch) | |
tree | 5aee2410587da3ab2f59106c72438133eed5262c /src/openvic-simulation/dataloader/Dataloader_Windows.hpp | |
parent | 444a27726695478e44e0166e75df1f354b6432d5 (diff) |
Move Victoria 2 path searching to Vic2PathSearch.cpp
Move fshash and _cached_paths definitions to Dataloader::Search_for_game_path
Diffstat (limited to 'src/openvic-simulation/dataloader/Dataloader_Windows.hpp')
-rw-r--r-- | src/openvic-simulation/dataloader/Dataloader_Windows.hpp | 170 |
1 files changed, 0 insertions, 170 deletions
diff --git a/src/openvic-simulation/dataloader/Dataloader_Windows.hpp b/src/openvic-simulation/dataloader/Dataloader_Windows.hpp deleted file mode 100644 index 37991b6..0000000 --- a/src/openvic-simulation/dataloader/Dataloader_Windows.hpp +++ /dev/null @@ -1,170 +0,0 @@ -#pragma once - -#include <concepts> -#pragma comment(lib, "advapi32.lib") - -#include <string> -#include <string_view> - -#include <Windows.h> - -namespace OpenVic::Windows { - inline std::wstring convert(std::string_view as) { - // deal with trivial case of empty string - if (as.empty()) { - return std::wstring(); - } - - // determine required length of new string - size_t length = ::MultiByteToWideChar(CP_UTF8, 0, as.data(), (int)as.length(), 0, 0); - - // construct new string of required length - std::wstring ret(length, L'\0'); - - // convert old string to new string - ::MultiByteToWideChar(CP_UTF8, 0, as.data(), (int)as.length(), &ret[0], (int)ret.length()); - - // return new string ( compiler should optimize this away ) - return ret; - } - - inline std::string convert(std::wstring_view as) { - // deal with trivial case of empty string - if (as.empty()) { - return std::string(); - } - - // determine required length of new string - size_t length = ::WideCharToMultiByte(CP_UTF8, 0, as.data(), (int)as.length(), 0, 0, NULL, NULL); - - // construct new string of required length - std::string ret(length, '\0'); - - // convert old string to new string - ::WideCharToMultiByte(CP_UTF8, 0, as.data(), (int)as.length(), &ret[0], (int)ret.length(), NULL, NULL); - - // return new string ( compiler should optimize this away ) - return ret; - } - - template<typename T, typename... U> - concept any_of = (std::same_as<T, U> || ...); - - template<typename T> - concept either_char_type = any_of<T, char, wchar_t>; - - template<typename T> - concept has_data = requires(T t) { - { t.data() } -> std::convertible_to<const typename T::value_type*>; - }; - - class RegistryKey { - public: - RegistryKey(HKEY key_handle) : _key_handle(key_handle) {} - - template<either_char_type CHAR_T, either_char_type CHAR_T2> - RegistryKey( - HKEY parent_key_handle, std::basic_string_view<CHAR_T> child_key_name, std::basic_string_view<CHAR_T2> value_name - ) { - open_key(parent_key_handle, child_key_name); - query_key(value_name); - } - - ~RegistryKey() { - close_key(); - } - - bool is_open() const { - return _key_handle != nullptr; - } - - std::wstring_view value() const { - return _value; - } - - template<either_char_type CHAR_T> - LSTATUS open_key(HKEY parent_key_handle, std::basic_string_view<CHAR_T> key_path) { - if (is_open()) { - close_key(); - } - if constexpr (std::is_same_v<CHAR_T, char>) { - return RegOpenKeyExW(parent_key_handle, convert(key_path).data(), REG_NONE, KEY_READ, &_key_handle); - } else { - return RegOpenKeyExW(parent_key_handle, key_path.data(), REG_NONE, KEY_READ, &_key_handle); - } - } - - bool is_predefined() const { - return (_key_handle == HKEY_CURRENT_USER) || (_key_handle == HKEY_LOCAL_MACHINE) || - (_key_handle == HKEY_CLASSES_ROOT) || (_key_handle == HKEY_CURRENT_CONFIG) || - (_key_handle == HKEY_CURRENT_USER_LOCAL_SETTINGS) || (_key_handle == HKEY_PERFORMANCE_DATA) || - (_key_handle == HKEY_PERFORMANCE_NLSTEXT) || (_key_handle == HKEY_PERFORMANCE_TEXT) || - (_key_handle == HKEY_USERS); - } - - LSTATUS close_key() { - if (!is_open() || is_predefined()) { - return ERROR_SUCCESS; - } - auto result = RegCloseKey(_key_handle); - _key_handle = nullptr; - return result; - } - - template<either_char_type CHAR_T> - LSTATUS query_key(std::basic_string_view<CHAR_T> value_name) { - DWORD data_size; - DWORD type; - - const auto& wide_value = [&value_name]() -> has_data auto { - if constexpr (std::is_same_v<CHAR_T, char>) { - return convert(value_name); - } else { - return value_name; - } - }(); - - auto result = RegQueryValueExW(_key_handle, wide_value.data(), NULL, &type, NULL, &data_size); - if (result != ERROR_SUCCESS || type != REG_SZ) { - close_key(); - return result; - } - _value = std::wstring(data_size / sizeof(wchar_t), L'\0'); - result = RegQueryValueExW( - _key_handle, wide_value.data(), NULL, NULL, reinterpret_cast<LPBYTE>(_value.data()), &data_size - ); - close_key(); - - std::size_t first_null = _value.find_first_of(L'\0'); - if (first_null != std::string::npos) { - _value.resize(first_null); - } - - return result; - } - - private: - HKEY _key_handle = nullptr; - std::wstring _value; - }; - - template<either_char_type RCHAR_T, either_char_type CHAR_T, either_char_type CHAR_T2> - std::basic_string<RCHAR_T> ReadRegValue( - HKEY root, std::basic_string_view<CHAR_T> key, std::basic_string_view<CHAR_T2> name - ) { - RegistryKey registry_key(root, key, name); - if constexpr (std::is_same_v<RCHAR_T, char>) { - return convert(registry_key.value()); - } else { - return registry_key.value(); - } - } - - template<either_char_type RCHAR_T, either_char_type CHAR_T, either_char_type CHAR_T2> - std::basic_string<RCHAR_T> ReadRegValue(HKEY root, const CHAR_T* key, const CHAR_T2* name) { - auto key_sv = std::basic_string_view(key); - auto name_sv = std::basic_string_view(name); - - return ReadRegValue<RCHAR_T>(root, key_sv, name_sv); - } -} |