MCPcopy Create free account
hub / github.com/SakuraEngine/SakuraEngine / FromString

Method FromString

modules/engine/runtime/src/_deprecated/type/serde.cpp:6–66  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

4#include <charconv>
5
6void skr_type_t::FromString(void* dst, skr::StringView str, skr::type::ValueSerializePolicy* policy) const
7{
8 using namespace skr::type;
9 if (policy)
10 policy->parse(policy, str, dst, this);
11 else
12 {
13 auto strData = (const char*)str.raw().data();
14 switch (type)
15 {
16 case SKR_TYPE_CATEGORY_BOOL:
17 if (str == u8"true")
18 *(bool*)dst = true;
19 else
20 *(bool*)dst = false;
21 break;
22 case SKR_TYPE_CATEGORY_I32:
23 std::from_chars(strData, strData + str.size(), *(int32_t*)dst);
24 break;
25 case SKR_TYPE_CATEGORY_I64:
26 std::from_chars(strData, strData + str.size(), *(int64_t*)dst);
27 break;
28 case SKR_TYPE_CATEGORY_U32:
29 std::from_chars(strData, strData + str.size(), *(uint32_t*)dst);
30 break;
31 case SKR_TYPE_CATEGORY_U64:
32 std::from_chars(strData, strData + str.size(), *(uint64_t*)dst);
33 break;
34 case SKR_TYPE_CATEGORY_F32:
35 fast_float::from_chars(strData, strData + str.size(), *(float*)dst);
36 break;
37 case SKR_TYPE_CATEGORY_F64:
38 fast_float::from_chars(strData, strData + str.size(), *(double*)dst);
39 break;
40 case SKR_TYPE_CATEGORY_GUID:
41 {
42 const auto guid_sv = str;
43 *(skr_guid_t*)dst = skr::guid::make_guid_unsafe(guid_sv);
44 }
45 break;
46 case SKR_TYPE_CATEGORY_MD5:
47 {
48 const auto md5_sv = str;
49 const auto success = skr_parse_md5(md5_sv.raw().data(), (skr_md5_t*)dst);
50 (void)success;
51 }
52 break;
53 case SKR_TYPE_CATEGORY_HANDLE:
54 {
55 const auto guid_sv = str;
56 (*(skr_resource_handle_t*)dst).set_guid(skr::guid::make_guid_unsafe(guid_sv));
57 }
58 break;
59 case SKR_TYPE_CATEGORY_ENUM:
60 ((const EnumType*)this)->FromString(dst, str);
61 break;
62 default:
63 break;

Callers 1

ConvertMethod · 0.80

Calls 8

make_guid_unsafeFunction · 0.85
skr_parse_md5Function · 0.85
set_guidMethod · 0.80
from_charsFunction · 0.50
parseMethod · 0.45
dataMethod · 0.45
rawMethod · 0.45
sizeMethod · 0.45

Tested by

no test coverage detected