commit x64 compilation from lulu cause the other branch dont seems to compile properly at home

This commit is contained in:
2026-07-17 16:08:20 +02:00
parent c0f3eeb00d
commit 0efa4ee6f7
625 changed files with 117283 additions and 4426 deletions

View File

@ -0,0 +1,122 @@
/* -----------------------------------------------------------------------------
GSFramework
Copyright 2001-2013 Emmanuel Julien. All Rights Reserved.
----------------------------------------------------------------------------- */
#include "metafile/nml.h"
#include "reflection/c_refl.h"
#include "memory/nauto_ptr.h"
#include "assert/nassert.h"
namespace GS {
namespace NML {
using namespace Reflection;
//------------------------------------------------------------------------------
bool GenericObjectFromMetaTag(Tag &t, void *o, Property *o_prop)
{
NMLTagForeach(pt, t)
for (int n = 0; o_prop[n].name; ++n)
if (pt->name == o_prop[n].name)
{
size_t p_prop = (size_t)o + o_prop[n].offset_of;
switch (o_prop[n].type)
{
case Property::BoolProp:
*(bool *)p_prop = pt->GetBool();
break;
case Property::CharProp:
*(char *)p_prop = (char)pt->GetInteger();
break;
case Property::ShortProp:
*(short *)p_prop = (short)pt->GetInteger();
break;
case Property::IntProp:
*(int *)p_prop = pt->GetInteger();
break;
case Property::FloatProp:
*(float *)p_prop = pt->GetReal();
break;
case Property::StringProp:
*(GS::String *)p_prop = pt->GetString();
break;
case Property::EnumProp:
__ASSERT__(o_prop[n].enum_dict);
*(int *)p_prop = Enum::fromString(pt->GetString(), o_prop[n].enum_dict);
break;
default:
__ASSERT_ALWAYS__;
break;
}
}
return true;
}
Tag *GenericObjectToMetaTag(Tag *t, const void *o, Property *o_prop)
{
if (t)
for (int n = 0; o_prop[n].name; ++n)
{
size_t p_prop = (size_t)o + o_prop[n].offset_of;
switch (o_prop[n].type)
{
case Property::BoolProp:
t->AddChild(o_prop[n].name, *(bool *)p_prop);
break;
case Property::CharProp:
t->AddChild(o_prop[n].name, (int)*(char *)p_prop);
break;
case Property::ShortProp:
t->AddChild(o_prop[n].name, (int)*(short *)p_prop);
break;
case Property::IntProp:
t->AddChild(o_prop[n].name, *(int *)p_prop);
break;
case Property::FloatProp:
t->AddChild(o_prop[n].name, *(float *)p_prop);
break;
case Property::StringProp:
t->AddChild(o_prop[n].name, ((GS::String *)p_prop)->c_str());
break;
case Property::EnumProp:
__ASSERT__(o_prop[n].enum_dict);
t->AddChild(o_prop[n].name, Enum::toString(*(int *)p_prop, o_prop[n].enum_dict));
break;
default:
__ASSERT_ALWAYS__;
break;
}
}
return t;
}
//------------------------------------------------------------------------------
//------------------------------------------------------------------------------
bool GenericObjectFromMetaFile(const char *uri, void *obj, Property *obj_prop, const char *root_name)
{
File file;
if (!Parser::Load(uri, file))
return false;
if (Tag *root = file.GetTag(root_name))
if (!GenericObjectFromMetaTag(*root, obj, obj_prop))
return false;
return true;
}
bool GenericObjectToMetaFile(const char *uri, const void *obj, Property *obj_prop, const char *root_name)
{
File file;
file.AddRoot(GenericObjectToMetaTag(new Tag(root_name), obj, obj_prop));
return Parser::Save(uri, file);
}
//------------------------------------------------------------------------------
} //NML
} // GS