SerializableSingleton< SINGLETON_CLASS > Class Template Reference

#include <SerializableSingleton.hpp>

Inherits boost::noncopyable.

Collaboration diagram for SerializableSingleton< SINGLETON_CLASS >:
Collaboration graph
[legend]

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 73 of file SerializableSingleton.hpp.


Member Function Documentation

template<class SINGLETON_CLASS>
SerializableSingleton<SINGLETON_CLASS>* SerializableSingleton< SINGLETON_CLASS >::GetSerializationWrapper (  )  const [inline]
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:
archive the archive
version the saved version of this class

Reimplemented in RandomNumberGenerator.

Definition at line 108 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:
archive the archive
version the current version of this class

Reimplemented in RandomNumberGenerator.

Definition at line 94 of file SerializableSingleton.hpp.


The documentation for this class was generated from the following file:
Generated on Thu Dec 22 13:07:33 2011 for Chaste by  doxygen 1.6.3