Designing Your Class to Use Isomorphic Persistence
Table 17 lists the Essential Tools Module classes that implement isomorphic persistence. You can also
add isomorphic persistence to an existing class, even if you only have the header files for that class. Before you can add isomorphic persistence to a class, it must meet the following requirements:
Class
T must have appropriate default and copy constructors defined or generated by the compiler:
T(); // default constructor
T(T& t); // copy constructor
Class
T must have an assignment operator defined as a member or as a global function:
T& operator=(const T& t); // member function
T& operator=(T& lhs, const T& rhs); // global function
On some older compilers, Class
T cannot have any non-type template parameters. For example, in
RWTBitVec<Size>, “size” is placeholder for a value rather than a type. The global functions used to implement isomorphic persistence (
rwRestoreGuts() and
rwSaveGuts()) are function templates when they are used to persist templatized classes.
All the data necessary to recreate an instance of Class
T must be globally available (have accessor functions). If you can't make this data available, you can't implement isomorphic persistence. More about this in
Make All Necessary Class Data Available.If your class
T will be stored in a C++ Standard Library container or a C++ Standard Library-based collection, you may need to implement
operator<(const T&, const T&) and
operator==(const T&, const T&). See
Example Using the Essential Tools Module with the C++ Standard Library for more information.
To create an isomorphically persistent class or to add isomorphic persistence to an existing class, follow these steps:
1. Make all necessary class data available.
2. Add RW_DECLARE_PERSISTABLE to your header file.
3. Add RW_DEFINE_PERSISTABLE to one source file.
4. Check for possible problems.
5. Define rwSaveGuts() and rwRestoreGuts().