Chaste Release::3.1
SerializableSingleton< SINGLETON_CLASS > Class Template Reference

#include <SerializableSingleton.hpp>

Inheritance diagram for SerializableSingleton< SINGLETON_CLASS >:
Collaboration diagram for SerializableSingleton< SINGLETON_CLASS >:

List of all members.

Public Member Functions

SerializableSingleton
< SINGLETON_CLASS > * 
GetSerializationWrapper () const

Private Member Functions

template<class Archive >
void save (Archive &archive, const unsigned int version) const
template<class Archive >
void load (Archive &archive, const unsigned int version)

Friends

class boost::serialization::access

Detailed Description

template<class SINGLETON_CLASS>
class SerializableSingleton< SINGLETON_CLASS >

This is a "wrapper" allowing more straightforward serialization of singleton classes. Any singleton class which needs to be serialized should inherit from this base. It provides both part of the "singleton-ness" (by inheriting from boost::noncopyable), and also a method GetSerializationWrapper(). Users of the singleton which wish to serialize it should not do so directly. Instead, they should call GetSerializationWrapper and serialize the returned pointer. Doing so will ensure that only a single global instance of the singleton is maintained when loading from an archive.

Note that if this is not done, and the singleton is serialized directly via the instance pointer, then objects loaded from the archive will refer to a different instance of the singleton from other code!

Usage examples:

For saving:

            SerializableSingleton<RandomNumberGenerator>* const p_wrapper = p_gen->GetSerializationWrapper();
            output_arch << p_wrapper;

For loading:

            SerializableSingleton<RandomNumberGenerator>* p_wrapper;
            input_arch >> p_wrapper;

Within a serialize method:

            SerializableSingleton<RandomNumberGenerator>* p_wrapper = p_gen->GetSerializationWrapper();
            archive & p_wrapper;

Note that immediately after a load the wrapper pointer loaded into becomes invalid; call GetSerializationWrapper again if you need a new wrapper for a subsequent save.

Definition at line 80 of file SerializableSingleton.hpp.


Member Function Documentation

template<class SINGLETON_CLASS>
template<class Archive >
void SerializableSingleton< SINGLETON_CLASS >::load ( Archive &  archive,
const unsigned int  version 
) [inline, private]

Load the wrapped singleton.

Parameters:
archivethe archive
versionthe saved version of this class

Reimplemented in RandomNumberGenerator.

Definition at line 115 of file SerializableSingleton.hpp.

template<class SINGLETON_CLASS>
template<class Archive >
void SerializableSingleton< SINGLETON_CLASS >::save ( Archive &  archive,
const unsigned int  version 
) const [inline, private]

Save the wrapped singleton.

Parameters:
archivethe archive
versionthe current version of this class

Reimplemented in RandomNumberGenerator.

Definition at line 101 of file SerializableSingleton.hpp.


The documentation for this class was generated from the following file: