#pragma once #include #include "StringHelper.hpp" #include #include namespace Unvirt { namespace AccessibleValue { constexpr const char c_InvalidEnumName[] = "[undefined]"; struct GeneralReflection { const char* mName; }; template using GeneralReflectionArray = std::vector>; template std::string GetEnumName(_Ty val, const GeneralReflectionArray<_Ty>& desc) { std::string strl; for (auto& item : desc) { if (item.first == val) { strl = item.second.mName; return strl; } } StringHelper::StdstringPrintf(strl, "%s (0x%08" PRIXCKDWORD ")", c_InvalidEnumName, static_cast(val) ); return strl; } template std::string GetFlagEnumName(_Ty val, const GeneralReflectionArray<_Ty>& desc, const char* splitor) { std::string strl, cache; for (auto& item : desc) { // if it have exacelt same entry, return directly if (item.first == val) { StringHelper::StdstringPrintf(strl, "%s (0x%08" PRIXCKDWORD ")", item.second.mName, static_cast(item.first) ); return strl; } // check flag match if (LibCmo::EnumsHelper::Has(val, item.first)) { if (strl.size() != 0u && splitor != nullptr) { strl += splitor; } StringHelper::StdstringPrintf(cache, "%s (0x%08" PRIXCKDWORD ")", item.second.mName, static_cast(item.first) ); strl += cache; } } // if nothing was gotten. set to undefined if (strl.size() == 0u) { StringHelper::StdstringPrintf(strl, "%s (0x%08" PRIXCKDWORD ")", c_InvalidEnumName, static_cast(val) ); } return strl; } std::string GetClassIdName(LibCmo::CK2::CK_CLASSID cls); std::string GetCkErrorName(LibCmo::CK2::CKERROR err); std::string GetClassIdHierarchy(LibCmo::CK2::CK_CLASSID cls); std::string GetCkErrorDescription(LibCmo::CK2::CKERROR err); std::string GetReadableFileSize(uint64_t size); namespace EnumDesc { extern const GeneralReflectionArray CK_FILE_WRITEMODE; extern const GeneralReflectionArray CK_FO_OPTIONS; extern const GeneralReflectionArray CK_STATECHUNK_CHUNKOPTIONS; extern const GeneralReflectionArray CK_STATECHUNK_DATAVERSION; extern const GeneralReflectionArray CK_STATECHUNK_CHUNKVERSION; extern const GeneralReflectionArray CK_OBJECT_FLAGS; extern const GeneralReflectionArray CK_3DENTITY_FLAGS; extern const GeneralReflectionArray CK_TEXTURE_SAVEOPTIONS; extern const GeneralReflectionArray CK_BITMAPDATA_FLAGS; extern const GeneralReflectionArray VX_PIXELFORMAT; extern const GeneralReflectionArray VXTEXTURE_BLENDMODE; extern const GeneralReflectionArray VXTEXTURE_FILTERMODE; extern const GeneralReflectionArray VXBLEND_MODE; extern const GeneralReflectionArray VXTEXTURE_ADDRESSMODE; extern const GeneralReflectionArray VXFILL_MODE; extern const GeneralReflectionArray VXSHADE_MODE; extern const GeneralReflectionArray VXCMPFUNC; extern const GeneralReflectionArray VX_EFFECT; extern const GeneralReflectionArray VX_MOVEABLE_FLAGS; extern const GeneralReflectionArray VXMESH_FLAGS; extern const GeneralReflectionArray VXTEXTURE_WRAPMODE; } } }