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

49 lines
1.3 KiB
Plaintext
Raw Normal View History

2024-04-25 21:45:41 +08:00
#pragma once
#include <string>
#include "convert.h"
namespace refl {
inline bool Convert::ToString(Any& dst, const Any& src)
2024-04-25 21:45:41 +08:00
{
2024-06-14 22:24:52 +08:00
if (src.cls == &TypeInfo<char>::StaticClass) {
2024-04-25 21:45:41 +08:00
std::construct_at(dst.CastTo<std::string*>(), src.CastTo<const char*>());
return true;
}
return false;
}
2024-06-14 22:24:52 +08:00
inline bool Convert::ToInt32(Any& dst, const Any& src)
{
if (src.cls == &TypeInfo<float>::StaticClass) {
*dst.CastTo<int*>() = *src.CastTo<float*>();
return true;
}
return false;
}
inline bool Convert::ToFloat(Any& dst, const Any& src)
{
if (src.cls == &TypeInfo<int>::StaticClass) {
*dst.CastTo<float*>() = *src.CastTo<int*>();
return true;
}
return false;
}
2024-04-25 21:45:41 +08:00
inline bool Convert::Construct(Any& dst, const Any& src)
{
2024-06-12 22:07:45 +08:00
if (dst.cls->CtorObject((void*)dst.ptr, src)) {
2024-04-25 21:45:41 +08:00
return true;
}
auto it = ClassMap.find(dst.cls);
if (it == ClassMap.end()) {
return false;
}
return it->second(dst, src);
}
inline ConvertMap Convert::BuildClassMap()
2024-04-25 21:45:41 +08:00
{
ConvertMap classMap;
2024-06-14 22:24:52 +08:00
classMap.emplace(&TypeInfo<std::string>::StaticClass, &ToString);
classMap.emplace(&TypeInfo<int>::StaticClass, &ToInt32);
classMap.emplace(&TypeInfo<uint32_t>::StaticClass, &ToInt32);
classMap.emplace(&TypeInfo<float>::StaticClass, &ToFloat);
2024-04-25 21:45:41 +08:00
return classMap;
}
}