zengine-old/engine/3rdparty/zlib/include/refl/detail/convert.h

29 lines
948 B
C
Raw Normal View History

2024-04-25 21:45:41 +08:00
#pragma once
#include "any.h"
2024-05-12 23:44:11 +08:00
#include <unordered_map>
2024-04-25 21:45:41 +08:00
namespace refl {
2024-06-25 20:26:46 +08:00
using UClassPair = std::pair<const UClass*, const UClass*>;
// 自定义哈希函数
struct UClassPairHash {
std::size_t operator()(const UClassPair& pair) const {
std::hash<const UClass*> ptr_hash;
return ptr_hash(pair.first) ^ (ptr_hash(pair.second) << 1);
}
};
struct UClassPairEqual {
bool operator()(const UClassPair& lhs, const UClassPair& rhs) const {
return lhs.first == rhs.first && lhs.second == rhs.second;
}
};
using ConvertFunc = bool (*)(Any& to, const Any& from);
using ConvertMap = std::unordered_map<UClassPair, ConvertFunc, UClassPairHash, UClassPairEqual>;
2024-04-25 21:45:41 +08:00
class Convert {
protected:
static ConvertMap BuildClassMap();
2024-06-25 20:26:46 +08:00
template<typename From, typename To>
static bool ConvertTo(Any& to, const Any& from);
2024-04-25 21:45:41 +08:00
public:
2024-06-25 20:26:46 +08:00
static bool Construct(Any& to,const Any& from);
2024-04-25 21:45:41 +08:00
inline static ConvertMap ClassMap = BuildClassMap();
};
}