#include <boost/version.hpp>
#include <boost/serialization/export.hpp>
#include <boost/preprocessor/cat.hpp>
#include <boost/preprocessor/stringize.hpp>
Go to the source code of this file.
Classes | |
struct | pack< void(T)> |
Defines | |
#define | COVERAGE_IGNORE |
gcov doesn't like this file... | |
#define | CHASTE_CLASS_EXPORT_TEMPLATED(T, S) BOOST_CLASS_EXPORT(T) |
#define | CHASTE_CLASS_EXPORT_INTERNAL(T) BOOST_CLASS_EXPORT(T) |
#define | CHASTE_EXPORT_KEY_1(CLASS, P1) BOOST_PP_CAT(CLASS, P1) |
#define | CHASTE_EXPORT_KEY_2(CLASS, P1, P2) BOOST_PP_CAT(BOOST_PP_CAT(CLASS, P1), P2) |
#define | CHASTE_EXPORT_KEY_3(CLASS, P1, P2, P3) BOOST_PP_CAT(BOOST_PP_CAT(BOOST_PP_CAT(CLASS, P1), P2), P3) |
#define | CHASTE_PACK_1(CLASS, P1) pack<void (CLASS< P1 >)>::type |
#define | CHASTE_PACK_2(CLASS, P1, P2) pack<void (CLASS< P1,P2 >)>::type |
#define | CHASTE_PACK_3(CLASS, P1, P2, P3) pack<void (CLASS< P1,P2,P3 >)>::type |
#define | EXPORT_TEMPLATE_CLASS3_INTERNAL(CLASS, E, S, P) CHASTE_CLASS_EXPORT_TEMPLATED( CHASTE_PACK_3(CLASS, E, S, P), CHASTE_EXPORT_KEY_3(CLASS, E, S, P) ) |
#define | EXPORT_TEMPLATE_CLASS2_INTERNAL(CLASS, E, S) CHASTE_CLASS_EXPORT_TEMPLATED( CHASTE_PACK_2(CLASS, E, S), CHASTE_EXPORT_KEY_2(CLASS, E, S) ) |
#define | EXPORT_TEMPLATE_CLASS1_INTERNAL(CLASS, D) CHASTE_CLASS_EXPORT_TEMPLATED( CHASTE_PACK_1(CLASS, D), CHASTE_EXPORT_KEY_1(CLASS, D) ) |
#define | EXPORT_TEMPLATE_CLASS_ALL_DIMS_INTERNAL(CLASS) |
#define | EXPORT_TEMPLATE_CLASS_SAME_DIMS_INTERNAL(CLASS) |
#define | CHASTE_CLASS_EXPORT(T) CHASTE_CLASS_EXPORT_INTERNAL(T) |
#define | EXPORT_TEMPLATE_CLASS_SAME_DIMS(CLASS) EXPORT_TEMPLATE_CLASS_SAME_DIMS_INTERNAL(CLASS) |
#define | EXPORT_TEMPLATE_CLASS_ALL_DIMS(CLASS) EXPORT_TEMPLATE_CLASS_ALL_DIMS_INTERNAL(CLASS) |
#define | EXPORT_TEMPLATE_CLASS1(CLASS, D) EXPORT_TEMPLATE_CLASS1_INTERNAL(CLASS, D) |
#define | EXPORT_TEMPLATE_CLASS2(CLASS, E, S) EXPORT_TEMPLATE_CLASS2_INTERNAL(CLASS, E, S) |
#define | EXPORT_TEMPLATE_CLASS3(CLASS, E, S, P) EXPORT_TEMPLATE_CLASS3_INTERNAL(CLASS, E, S, P) |
In Boost 1.33.1 and 1.34, BOOST_CLASS_EXPORT should be placed in the .hpp file for each class, and archive headers included only in tests, or special 'archiver' class header files (e.g. CardiacSimulationArchiver.hpp).
Serialization is broken in Boost 1.35.
In Boost 1.36 (and up to 1.40) both the archive header includes and the BOOST_CLASS_EXPORT should go in .cpp files.
We don't yet support 1.41 and above, which introduce BOOST_CLASS_EXPORT_KEY and BOOST_CLASS_EXPORT_IMPLEMENT.
To handle all situations in Chaste: 1. In .hpp files, include this header after the class definition. 2. In .cpp files, after any other includes, include SerializationExportWrapperForCpp.hpp. In both cases, CHASTE_CLASS_EXPORT should be used instead of BOOST_CLASS_EXPORT.
There are also variant macros for common cases of templated classes:
The latter 3 macros are usable in any situation where a class has up to 3 template parameters, and you know what values will be needed. Unfortunately a fully general template solution seems to be impossible in any Boost version (the library makes use of either explicit instantiation or singleton class instantiation).
Definition in file SerializationExportWrapper.hpp.
#define CHASTE_CLASS_EXPORT | ( | T | ) | CHASTE_CLASS_EXPORT_INTERNAL(T) |
Define the serialization export key for this class.
T | the class |
Definition at line 392 of file SerializationExportWrapper.hpp.
#define CHASTE_CLASS_EXPORT_INTERNAL | ( | T | ) | BOOST_CLASS_EXPORT(T) |
What CHASTE_CLASS_EXPORT expands to when it isn't a no-op.
T | the class to export |
Definition at line 217 of file SerializationExportWrapper.hpp.
#define CHASTE_CLASS_EXPORT_TEMPLATED | ( | T, | |||
S | ) | BOOST_CLASS_EXPORT(T) |
General export for templated classes.
T | a type | |
S | a unique string for the class + specific template parameter values |
Definition at line 210 of file SerializationExportWrapper.hpp.
#define CHASTE_EXPORT_KEY_1 | ( | CLASS, | |||
P1 | ) | BOOST_PP_CAT(CLASS, P1) |
Defines the export key for a class templated over 1 parameter.
CLASS | the class | |
P1 | the template parameter |
Definition at line 241 of file SerializationExportWrapper.hpp.
#define CHASTE_EXPORT_KEY_2 | ( | CLASS, | |||
P1, | |||||
P2 | ) | BOOST_PP_CAT(BOOST_PP_CAT(CLASS, P1), P2) |
Defines the export key for a class templated over 2 parameters.
CLASS | the class | |
P1 | the first template parameter | |
P2 | the second template parameter |
Definition at line 250 of file SerializationExportWrapper.hpp.
#define CHASTE_EXPORT_KEY_3 | ( | CLASS, | |||
P1, | |||||
P2, | |||||
P3 | ) | BOOST_PP_CAT(BOOST_PP_CAT(BOOST_PP_CAT(CLASS, P1), P2), P3) |
Defines the export key for a class templated over 3 parameters.
CLASS | the class | |
P1 | the first template parameter | |
P2 | the second template parameter | |
P3 | the third template parameter |
Definition at line 260 of file SerializationExportWrapper.hpp.
#define CHASTE_PACK_1 | ( | CLASS, | |||
P1 | ) | pack<void (CLASS< P1 >)>::type |
Defines the export type for a class templated over 1 parameter.
CLASS | the class | |
P1 | the template parameter |
Definition at line 268 of file SerializationExportWrapper.hpp.
#define CHASTE_PACK_2 | ( | CLASS, | |||
P1, | |||||
P2 | ) | pack<void (CLASS< P1,P2 >)>::type |
Defines the export type for a class templated over 2 parameters.
CLASS | the class | |
P1 | the first template parameter | |
P2 | the second template parameter |
Definition at line 276 of file SerializationExportWrapper.hpp.
#define CHASTE_PACK_3 | ( | CLASS, | |||
P1, | |||||
P2, | |||||
P3 | ) | pack<void (CLASS< P1,P2,P3 >)>::type |
Defines the export type for a class templated over 3 parameters.
CLASS | the class | |
P1 | the first template parameter | |
P2 | the second template parameter | |
P3 | the third template parameter |
Definition at line 285 of file SerializationExportWrapper.hpp.
#define EXPORT_TEMPLATE_CLASS1 | ( | CLASS, | |||
D | ) | EXPORT_TEMPLATE_CLASS1_INTERNAL(CLASS, D) |
Export a templated class with 1 parameter.
CLASS | the class (without parameters) | |
D | template parameter |
Definition at line 410 of file SerializationExportWrapper.hpp.
#define EXPORT_TEMPLATE_CLASS1_INTERNAL | ( | CLASS, | |||
D | ) | CHASTE_CLASS_EXPORT_TEMPLATED( CHASTE_PACK_1(CLASS, D), CHASTE_EXPORT_KEY_1(CLASS, D) ) |
Export a templated class with 1 parameter. This is the definition of EXPORT_TEMPLATE_CLASS1 when it isn't a no-op.
CLASS | the class (without parameters) | |
D | template parameter |
Definition at line 335 of file SerializationExportWrapper.hpp.
#define EXPORT_TEMPLATE_CLASS2 | ( | CLASS, | |||
E, | |||||
S | ) | EXPORT_TEMPLATE_CLASS2_INTERNAL(CLASS, E, S) |
Export a templated class with 2 parameters.
CLASS | the class (without parameters) | |
E | first template parameter | |
S | second template parameter |
Definition at line 417 of file SerializationExportWrapper.hpp.
#define EXPORT_TEMPLATE_CLASS2_INTERNAL | ( | CLASS, | |||
E, | |||||
S | ) | CHASTE_CLASS_EXPORT_TEMPLATED( CHASTE_PACK_2(CLASS, E, S), CHASTE_EXPORT_KEY_2(CLASS, E, S) ) |
Export a templated class with 2 parameters. This is the definition of EXPORT_TEMPLATE_CLASS2 when it isn't a no-op.
CLASS | the class (without parameters) | |
E | first template parameter | |
S | second template parameter |
Definition at line 326 of file SerializationExportWrapper.hpp.
#define EXPORT_TEMPLATE_CLASS3 | ( | CLASS, | |||
E, | |||||
S, | |||||
P | ) | EXPORT_TEMPLATE_CLASS3_INTERNAL(CLASS, E, S, P) |
Export a templated class with 3 parameters.
CLASS | the class (without parameters) | |
E | first template parameter | |
S | second template parameter | |
P | third template parameter |
Definition at line 425 of file SerializationExportWrapper.hpp.
#define EXPORT_TEMPLATE_CLASS3_INTERNAL | ( | CLASS, | |||
E, | |||||
S, | |||||
P | ) | CHASTE_CLASS_EXPORT_TEMPLATED( CHASTE_PACK_3(CLASS, E, S, P), CHASTE_EXPORT_KEY_3(CLASS, E, S, P) ) |
Export a templated class with 3 parameters. This is the definition of EXPORT_TEMPLATE_CLASS3 when it isn't a no-op.
CLASS | the class (without parameters) | |
E | first template parameter | |
S | second template parameter | |
P | third template parameter |
Definition at line 316 of file SerializationExportWrapper.hpp.
#define EXPORT_TEMPLATE_CLASS_ALL_DIMS | ( | CLASS | ) | EXPORT_TEMPLATE_CLASS_ALL_DIMS_INTERNAL(CLASS) |
Export a class templated over both element and space dimension, for all valid combinations.
CLASS | the class (without parameters) |
Definition at line 404 of file SerializationExportWrapper.hpp.
#define EXPORT_TEMPLATE_CLASS_ALL_DIMS_INTERNAL | ( | CLASS | ) |
Value:
EXPORT_TEMPLATE_CLASS2(CLASS, 1, 1) \ EXPORT_TEMPLATE_CLASS2(CLASS, 1, 2) \ EXPORT_TEMPLATE_CLASS2(CLASS, 1, 3) \ EXPORT_TEMPLATE_CLASS2(CLASS, 2, 2) \ EXPORT_TEMPLATE_CLASS2(CLASS, 2, 3) \ EXPORT_TEMPLATE_CLASS2(CLASS, 3, 3)
CLASS | the class (without parameters) |
Definition at line 344 of file SerializationExportWrapper.hpp.
#define EXPORT_TEMPLATE_CLASS_SAME_DIMS | ( | CLASS | ) | EXPORT_TEMPLATE_CLASS_SAME_DIMS_INTERNAL(CLASS) |
Export a class templated over both element and space dimension, for combinations where ELEMENT_DIM == SPACE_DIM.
CLASS | the class (without parameters) |
Definition at line 398 of file SerializationExportWrapper.hpp.
#define EXPORT_TEMPLATE_CLASS_SAME_DIMS_INTERNAL | ( | CLASS | ) |
Value:
EXPORT_TEMPLATE_CLASS1(CLASS, 1) \ EXPORT_TEMPLATE_CLASS1(CLASS, 2) \ EXPORT_TEMPLATE_CLASS1(CLASS, 3)
CLASS | the class (without parameters) |
Definition at line 358 of file SerializationExportWrapper.hpp.