2023-02-08 22:57:31 +08:00
|
|
|
#pragma once
|
|
|
|
|
|
|
|
#include <VTConstants.hpp>
|
2023-02-09 14:12:02 +08:00
|
|
|
#include <vector>
|
2023-02-08 22:57:31 +08:00
|
|
|
#include <string>
|
|
|
|
|
|
|
|
namespace Unvirt {
|
|
|
|
namespace AccessibleValue {
|
|
|
|
|
2023-02-09 17:16:58 +08:00
|
|
|
extern const char c_InvalidEnumName[];
|
|
|
|
|
|
|
|
#pragma region universal enum name
|
|
|
|
|
2023-02-09 14:12:02 +08:00
|
|
|
template<typename TEnum>
|
|
|
|
using EnumDescPairArray = std::vector<std::pair<TEnum, const char*>>;
|
2023-02-08 22:57:31 +08:00
|
|
|
|
2023-02-09 14:12:02 +08:00
|
|
|
namespace EnumDesc {
|
|
|
|
extern const EnumDescPairArray<LibCmo::CK_FILE_WRITEMODE> CK_FILE_WRITEMODE;
|
|
|
|
extern const EnumDescPairArray<LibCmo::CK_LOAD_FLAGS> CK_LOAD_FLAGS;
|
|
|
|
extern const EnumDescPairArray<LibCmo::CK_FO_OPTIONS> CK_FO_OPTIONS;
|
2023-02-14 21:31:18 +08:00
|
|
|
extern const EnumDescPairArray<LibCmo::CK_PLUGIN_TYPE> CK_PLUGIN_TYPE;
|
2023-02-09 14:12:02 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
template<typename TEnum>
|
2023-02-09 17:16:58 +08:00
|
|
|
void GetEnumName(const EnumDescPairArray<TEnum>& desc, std::string& strl, TEnum val) {
|
|
|
|
for (auto it = desc.begin(); it != desc.end(); ++it) {
|
|
|
|
if ((*it).first == val) {
|
|
|
|
strl = (*it).second;
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
strl = c_InvalidEnumName;
|
|
|
|
}
|
2023-02-09 14:12:02 +08:00
|
|
|
template<typename TEnum>
|
2023-02-09 17:16:58 +08:00
|
|
|
void GetFlagEnumName(const EnumDescPairArray<TEnum>& desc, std::string& strl, TEnum val) {
|
|
|
|
strl.clear();
|
|
|
|
for (auto it = desc.begin(); it != desc.end(); ++it) {
|
|
|
|
// if it have exacelt same entry, return directly
|
|
|
|
if ((*it).first == val) {
|
|
|
|
strl = (*it).second;
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
// check flag match
|
|
|
|
if (LibCmo::EnumHelper::FlagEnumHas(val, (*it).first)) {
|
|
|
|
// matched, add it
|
|
|
|
if (strl.size() != 0u) strl += ", ";
|
|
|
|
strl += (*it).second;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
if (strl.size() == 0u) {
|
|
|
|
// nothing was gotten. set to undefined
|
|
|
|
strl = c_InvalidEnumName;
|
|
|
|
} // otherwise return directly
|
|
|
|
}
|
|
|
|
|
|
|
|
#pragma endregion
|
2023-02-08 22:57:31 +08:00
|
|
|
|
|
|
|
void GetClassIdName(std::string& strl, LibCmo::CK_CLASSID cls);
|
|
|
|
void GetCkErrorName(std::string& strl, LibCmo::CKERROR err);
|
|
|
|
void GetClassIdHierarchy(std::string& strl, LibCmo::CK_CLASSID cls);
|
|
|
|
void GetCkErrorDescription(std::string& strl, LibCmo::CKERROR err);
|
2023-02-09 14:12:02 +08:00
|
|
|
|
2023-02-08 22:57:31 +08:00
|
|
|
void GetAccessibleFileSize(std::string& strl, uint64_t size);
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|