33#ifndef __H__UG_archivar
34#define __H__UG_archivar
38#include <boost/mpl/for_each.hpp>
40#include "../boost_serialization.h"
48 template <
typename TArchive,
typename TBase,
typename TDerived>
51 static_assert((std::is_base_of<TBase, TDerived>::value),
"TDerived is not a subclass of TBase");
52 TDerived& derived =
dynamic_cast<TDerived&
>(base);
53 ar & make_nvp(
name, derived);
58template <
class TArchive,
class TBase,
class TPairSeq>
65 boost::mpl::for_each<TPairSeq>(
func);
77 std::string typeName(
typeid(t).
name());
79 typename callback_map_t::iterator icallback =
m_callbackMap.find(typeName);
81 "Unregistered class used in 'Archivar::archive': " << typeName);
83 icallback->second(ar, t,
name);
86 template <
class TDerived>
89 static_assert((std::is_base_of<TBase, TDerived>::value),
"TDerived is not a subclass of TBase");
90 std::string typeName(
typeid(TDerived).
name());
92 &detail::archivar::CallArchiveOnDerivedClass<TArchive, TBase, TDerived>;
location name
Definition checkpoint_util.lua:128
void register_class(const char *name)
Definition archivar.h:87
void archive(TArchive &ar, T &t)
Definition archivar.h:69
std::map< std::string, archive_sig > callback_map_t
Definition archivar.h:98
callback_map_t m_callbackMap
Definition archivar.h:99
Archivar()
Definition archivar.h:62
void archive(TArchive &ar, T &t, const char *name)
Definition archivar.h:75
void(* archive_sig)(TArchive &, TBase &, const char *name)
Definition archivar.h:96
#define UG_COND_THROW(cond, msg)
UG_COND_THROW(cond, msg) : performs a UG_THROW(msg) if cond == true.
Definition error.h:61
void CallArchiveOnDerivedClass(TArchive &ar, TBase &base, const char *name)
Definition archivar.h:49
function func(x, y, z, t, si)
Definition register_type_pair_functor.h:43