/* ----------------------------------------------------------------------------- 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 bool LoadFromFile(T &object, File &file) { return file.isEmpty() ? false : object.FromMetaTag(*file.GetTags()[0]); } template 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 bool SaveToFile(T &object, File &file) { file.Clear(); return file.AddRoot(object.AsMetaTag()) ? true : false; } template 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__