From 03705ca2dc45f6e244d45152522df6fb2785f506 Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Mon, 6 Feb 2023 14:29:22 +0800 Subject: [PATCH] 1 --- f8/utils.h | 31 ++++++++++++++++--------------- 1 file changed, 16 insertions(+), 15 deletions(-) diff --git a/f8/utils.h b/f8/utils.h index 23c1c2b..1daf247 100644 --- a/f8/utils.h +++ b/f8/utils.h @@ -2,7 +2,7 @@ #include #include -#include +#include namespace a8 { @@ -17,52 +17,53 @@ namespace f8 { template - bool ReadCsvMetaFile(const std::string& filename, std::vector& meta_list) + bool ReadJsonMetaFile(const std::string& filename, std::vector& meta_list) { T dummy; a8::reflect::Class* cls = dummy.GetClass(); - a8::CsvReader reader; - reader.Load(filename); - while (reader.NextLine()) { + a8::XObject xobj_arr; + xobj_arr.ReadFromFile(filename); + for (int i = 0; i < xobj_arr.Size(); ++i) { T* obj = new T(); a8::reflect::Field* fields = cls->GetDeclaredFields(); - for (int i = 0; i < cls->FieldNum(); ++i) { - a8::reflect::Field& field = fields[i]; + for (int ii = 0; ii < cls->FieldNum(); ++ii) { + a8::reflect::Field& field = fields[ii]; if (field.subtype != a8::reflect::EST_SIMPLE) { abort(); } + auto xobj = xobj_arr.At(i); void* p = (char*)obj + field.offset; - if (reader.KeyExists(field.field_name)) { + if (xobj->HasKey(field.field_name)) { switch (field.type) { case a8::reflect::ET_INT32: { - *((int*)p) = reader.GetValue(field.field_name); + *((int*)p) = xobj->At(field.field_name)->AsXValue(); } break; case a8::reflect::ET_UINT32: { - *((unsigned int*)p) = reader.GetValue(field.field_name); + *((unsigned int*)p) = xobj->At(field.field_name)->AsXValue(); } break; case a8::reflect::ET_INT64: { - *((long long*)p) = reader.GetValue(field.field_name); + *((long long*)p) = xobj->At(field.field_name)->AsXValue(); } break; case a8::reflect::ET_FLOAT: { - *((float*)p) = reader.GetValue(field.field_name).GetDouble(); + *((float*)p) = xobj->At(field.field_name)->AsXValue().GetDouble(); } break; case a8::reflect::ET_DOUBLE: { - *((double*)p) = reader.GetValue(field.field_name); + *((double*)p) = xobj->At(field.field_name)->AsXValue(); } break; case a8::reflect::ET_STRING: { - *((std::string*)p) = reader.GetValue(field.field_name).GetString(); + *((std::string*)p) = xobj->At(field.field_name)->AsXValue().GetString(); } break; default: @@ -70,7 +71,7 @@ namespace f8 abort(); } } - obj->__flags__.set(i); + obj->__flags__.set(ii); } } meta_list.push_back(obj);