Skip to content
Snippets Groups Projects

Serialization

Merged Jeremie Deray requested to merge serialization into master
1 unresolved thread
1 file
+ 10
11
Compare changes
  • Side-by-side
  • Inline
@@ -9,6 +9,14 @@
namespace wolf {
namespace serialization {
/// @todo demangle typeid.name ?
template <typename T>
inline const std::string& type_name(const T&)
{
static const std::string typeid_name = typeid(T).name();
return typeid_name;
}
inline std::string extension(const std::string& file)
{
const std::size_t p = file.find_last_of(".");
@@ -93,27 +101,18 @@ void serialize_pack(Ar&&)
// end of expansion
}
/// @todo demangle typeid.name ?
template <typename Ar, typename T, typename... Args>
void serialize_pack(Ar&& archive, T&& object, Args&&... args)
{
archive( cereal::make_nvp(typeid(T).name(), std::forward<T>(object)) );
archive( cereal::make_nvp(type_name(object), std::forward<T>(object)) );
serialize_pack(archive, std::forward<Args>(args)...);
}
template <typename Ar, typename S, typename T>
void serialize(S& stream, T&& object)
{
Ar archive(stream);
archive( cereal::make_nvp(typeid(T).name(), std::forward<T>(object)) );
}
template <typename Ar, typename S, typename T, typename... Args>
void serialize(S& stream, T&& object, Args&&... args)
{
Ar archive(stream);
archive( cereal::make_nvp(typeid(T).name(), std::forward<T>(object)) );
archive( cereal::make_nvp(type_name(object), std::forward<T>(object)) );
serialize_pack(archive, std::forward<Args>(args)...);
}
Loading