61 lines
1.6 KiB
C++
61 lines
1.6 KiB
C++
/* -----------------------------------------------------------------------------
|
|
GSFramework
|
|
Copyright 2001-2013 Emmanuel Julien. All Rights Reserved.
|
|
----------------------------------------------------------------------------- */
|
|
|
|
|
|
#ifndef __NMETAOBJECT__
|
|
#define __NMETAOBJECT__
|
|
|
|
|
|
#include "metafile/nml.h"
|
|
#include "reflection/c_refl.h"
|
|
|
|
|
|
/*!
|
|
@short Serialization helper.
|
|
@author Emmanuel Julien (ejulien@gsworks.fr)
|
|
*/
|
|
namespace GS {
|
|
namespace NML {
|
|
|
|
template <class T> bool LoadFromFile(T &object, File &file)
|
|
{
|
|
return file.isEmpty() ? false : object.FromMetaTag(*file.GetTags()[0]);
|
|
}
|
|
template <class T> bool LoadFromFile(T &object, const char *path, bool verbose = true)
|
|
{
|
|
File file;
|
|
file.name = path;
|
|
if (!Parser::Load(path, file, verbose))
|
|
return false;
|
|
return LoadFromFile(object, file);
|
|
}
|
|
|
|
template <class T> bool SaveToFile(T &object, File &file)
|
|
{
|
|
file.Clear();
|
|
return file.AddRoot(object.AsMetaTag()) ? true : false;
|
|
}
|
|
template <class T> bool SaveToFile(T &object, const char *path)
|
|
{
|
|
File file;
|
|
file.name = path;
|
|
if (!SaveToFile(object, file))
|
|
return false;
|
|
|
|
return Parser::Save(path, file);
|
|
}
|
|
|
|
bool GenericObjectFromMetaTag(Tag &, void *obj, Reflection::Property *obj_prop);
|
|
Tag *GenericObjectToMetaTag(Tag *, const void *obj, Reflection::Property *obj_prop);
|
|
|
|
bool GenericObjectFromMetaFile(const char *, void *obj, Reflection::Property *obj_prop, const char *root_name = 0);
|
|
bool GenericObjectToMetaFile(const char *, const void *obj, Reflection::Property *obj_prop, const char *root_name = 0);
|
|
|
|
} // NML
|
|
} // GS
|
|
|
|
|
|
#endif // __NMETAOBJECT__
|