From e04f8dd6aea2258c668ae0243a65f1628bc77555 Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Mon, 26 Dec 2022 14:14:04 +0800 Subject: [PATCH] 1 --- f8/utils.h | 72 ++++++++++++++++++++++++++++-------------------------- 1 file changed, 37 insertions(+), 35 deletions(-) diff --git a/f8/utils.h b/f8/utils.h index 6d03d4f..23c1c2b 100644 --- a/f8/utils.h +++ b/f8/utils.h @@ -33,43 +33,45 @@ namespace f8 abort(); } void* p = (char*)obj + field.offset; - switch (field.type) { - case a8::reflect::ET_INT32: - { - *((int*)p) = reader.GetValue(field.field_name); - } - break; - case a8::reflect::ET_UINT32: - { - *((unsigned int*)p) = reader.GetValue(field.field_name); - } - break; - case a8::reflect::ET_INT64: - { - *((long long*)p) = reader.GetValue(field.field_name); - } - break; - case a8::reflect::ET_FLOAT: - { - *((float*)p) = reader.GetValue(field.field_name).GetDouble(); - } - break; - case a8::reflect::ET_DOUBLE: - { - *((double*)p) = reader.GetValue(field.field_name); - } - break; - case a8::reflect::ET_STRING: - { - *((std::string*)p) = reader.GetValue(field.field_name).GetString(); - } - break; - default: - { - abort(); + if (reader.KeyExists(field.field_name)) { + switch (field.type) { + case a8::reflect::ET_INT32: + { + *((int*)p) = reader.GetValue(field.field_name); + } + break; + case a8::reflect::ET_UINT32: + { + *((unsigned int*)p) = reader.GetValue(field.field_name); + } + break; + case a8::reflect::ET_INT64: + { + *((long long*)p) = reader.GetValue(field.field_name); + } + break; + case a8::reflect::ET_FLOAT: + { + *((float*)p) = reader.GetValue(field.field_name).GetDouble(); + } + break; + case a8::reflect::ET_DOUBLE: + { + *((double*)p) = reader.GetValue(field.field_name); + } + break; + case a8::reflect::ET_STRING: + { + *((std::string*)p) = reader.GetValue(field.field_name).GetString(); + } + break; + default: + { + abort(); + } } + obj->__flags__.set(i); } - obj->__flags__.set(i); } meta_list.push_back(obj); }