29 #ifndef CEREAL_ACCESS_HPP_ 30 #define CEREAL_ACCESS_HPP_ 32 #include <type_traits> 96 {
return std::false_type(); }
101 namespace memory_detail{
template <
class Ar,
class T>
struct LoadAndConstructLoadWrapper; }
163 template <
class ... Args>
164 void operator()( Args && ... args );
175 throw Exception(
"Object must be initialized prior to accessing members");
194 template <
class A,
class B>
friend struct ::cereal::memory_detail::LoadAndConstructLoadWrapper;
196 construct( T * p ) : itsPtr( p ), itsValid(
false ) {}
227 template<
class Archive,
class T>
inline 228 static auto member_serialize(Archive & ar, T & t) -> decltype(t.CEREAL_SERIALIZE_FUNCTION_NAME(ar))
229 {
return t.CEREAL_SERIALIZE_FUNCTION_NAME(ar); }
231 template<
class Archive,
class T>
inline 232 static auto member_save(Archive & ar, T
const & t) -> decltype(t.CEREAL_SAVE_FUNCTION_NAME(ar))
233 {
return t.CEREAL_SAVE_FUNCTION_NAME(ar); }
235 template<
class Archive,
class T>
inline 236 static auto member_save_non_const(Archive & ar, T & t) -> decltype(t.CEREAL_SAVE_FUNCTION_NAME(ar))
237 {
return t.CEREAL_SAVE_FUNCTION_NAME(ar); }
239 template<
class Archive,
class T>
inline 240 static auto member_load(Archive & ar, T & t) -> decltype(t.CEREAL_LOAD_FUNCTION_NAME(ar))
241 {
return t.CEREAL_LOAD_FUNCTION_NAME(ar); }
243 template<
class Archive,
class T>
inline 244 static auto member_save_minimal(Archive
const & ar, T
const & t) -> decltype(t.CEREAL_SAVE_MINIMAL_FUNCTION_NAME(ar))
245 {
return t.CEREAL_SAVE_MINIMAL_FUNCTION_NAME(ar); }
247 template<
class Archive,
class T>
inline 248 static auto member_save_minimal_non_const(Archive
const & ar, T & t) -> decltype(t.CEREAL_SAVE_MINIMAL_FUNCTION_NAME(ar))
249 {
return t.CEREAL_SAVE_MINIMAL_FUNCTION_NAME(ar); }
251 template<
class Archive,
class T,
class U>
inline 252 static auto member_load_minimal(Archive
const & ar, T & t, U && u) -> decltype(t.CEREAL_LOAD_MINIMAL_FUNCTION_NAME(ar, std::forward<U>(u)))
253 {
return t.CEREAL_LOAD_MINIMAL_FUNCTION_NAME(ar, std::forward<U>(u)); }
256 template<
class Archive,
class T>
inline 257 static auto member_serialize(Archive & ar, T & t,
const std::uint32_t version ) -> decltype(t.CEREAL_SERIALIZE_FUNCTION_NAME(ar, version))
258 {
return t.CEREAL_SERIALIZE_FUNCTION_NAME(ar, version); }
260 template<
class Archive,
class T>
inline 261 static auto member_save(Archive & ar, T
const & t,
const std::uint32_t version ) -> decltype(t.CEREAL_SAVE_FUNCTION_NAME(ar, version))
262 {
return t.CEREAL_SAVE_FUNCTION_NAME(ar, version); }
264 template<
class Archive,
class T>
inline 265 static auto member_save_non_const(Archive & ar, T & t,
const std::uint32_t version ) -> decltype(t.CEREAL_SAVE_FUNCTION_NAME(ar, version))
266 {
return t.CEREAL_SAVE_FUNCTION_NAME(ar, version); }
268 template<
class Archive,
class T>
inline 269 static auto member_load(Archive & ar, T & t,
const std::uint32_t version ) -> decltype(t.CEREAL_LOAD_FUNCTION_NAME(ar, version))
270 {
return t.CEREAL_LOAD_FUNCTION_NAME(ar, version); }
272 template<
class Archive,
class T>
inline 273 static auto member_save_minimal(Archive
const & ar, T
const & t,
const std::uint32_t version) -> decltype(t.CEREAL_SAVE_MINIMAL_FUNCTION_NAME(ar, version))
274 {
return t.CEREAL_SAVE_MINIMAL_FUNCTION_NAME(ar, version); }
276 template<
class Archive,
class T>
inline 277 static auto member_save_minimal_non_const(Archive
const & ar, T & t,
const std::uint32_t version) -> decltype(t.CEREAL_SAVE_MINIMAL_FUNCTION_NAME(ar, version))
278 {
return t.CEREAL_SAVE_MINIMAL_FUNCTION_NAME(ar, version); }
280 template<
class Archive,
class T,
class U>
inline 281 static auto member_load_minimal(Archive
const & ar, T & t, U && u,
const std::uint32_t version) -> decltype(t.CEREAL_LOAD_MINIMAL_FUNCTION_NAME(ar, std::forward<U>(u), version))
282 {
return t.CEREAL_LOAD_MINIMAL_FUNCTION_NAME(ar, std::forward<U>(u), version); }
286 template <
class T>
inline 287 static auto shared_from_this(T & t) -> decltype(t.shared_from_this());
290 template <
class T,
class ... Args>
inline 291 static void construct( T *& ptr, Args && ... args )
293 new (ptr) T( std::forward<Args>( args )... );
297 template <
class T>
inline 303 template <
class T>
inline 305 {
return std::false_type(); }
307 template<
class T,
class Archive>
inline 310 T::load_and_construct( ar, construct );
323 member_load_save_minimal,
324 non_member_serialize,
325 non_member_load_save,
326 non_member_load_save_minimal
383 template <
class Archive,
class T, specialization S>
397 #define CEREAL_SPECIALIZE_FOR_ALL_ARCHIVES( Type, Specialization ) \ 398 namespace cereal { template <class Archive> struct specialize<Archive, Type, Specialization> {}; } 411 #define CEREAL_SPECIALIZE_FOR_ARCHIVE( Archive, Type, Specialization ) \ 412 namespace cereal { template <> struct specialize<Archive, Type, Specialization> {}; } 416 template <
class T>
template <
class ... Args>
inline 420 throw Exception(
"Attempting to construct an already initialized object");
422 ::cereal::access::construct( itsPtr, std::forward<Args>( args )... );
427 #endif // CEREAL_ACCESS_HPP_ T * operator->()
Get a reference to the initialized underlying object.
Definition: access.hpp:172
specialization
Definition: access.hpp:319
Used to construct types with no default constructor.
Definition: access.hpp:151
static std::false_type load_and_construct(...)
Called by cereal if no default constructor exists to load and construct data simultaneously.
Definition: access.hpp:95
A class that allows cereal to load smart pointers to types that have no default constructor.
Definition: access.hpp:91
Internal helper functionality.
A class that can be made a friend to give cereal access to non public functions.
Definition: access.hpp:223
Definition: access.hpp:39
Preprocessor macros that can customise the cereal library.
void operator()(Args &&...args)
Construct and initialize the type T with the given arguments.
Definition: access.hpp:417
T * ptr()
Returns a raw pointer to the initialized underlying object.
Definition: access.hpp:188
A class used to disambiguate cases where cereal cannot detect a unique way of serializing a class...
Definition: access.hpp:384
An exception class thrown when things go wrong at runtime.
Definition: helpers.hpp:48