+++ /dev/null
-#ifndef STLPLUS_PERSISTENT_CONTEXTS\r
-#define STLPLUS_PERSISTENT_CONTEXTS\r
-////////////////////////////////////////////////////////////////////////////////\r
-\r
-// Author: Andy Rushton\r
-// Copyright: (c) Southampton University 1999-2004\r
-// (c) Andy Rushton 2004-2009\r
-// License: BSD License, see ../docs/license.html\r
-\r
-// Core context classes used to control the persistent dump/restore operations\r
-\r
-////////////////////////////////////////////////////////////////////////////////\r
-\r
-#include "persistence_fixes.hpp"\r
-#include "persistent.hpp"\r
-#include <iostream>\r
-#include <map>\r
-#include <typeinfo>\r
-\r
-////////////////////////////////////////////////////////////////////////////////\r
-\r
-namespace stlplus\r
-{\r
-\r
- ////////////////////////////////////////////////////////////////////////////////\r
- // Internals\r
-\r
- class dump_context_body;\r
- class restore_context_body;\r
-\r
- ////////////////////////////////////////////////////////////////////////////////\r
- // The format version number currently supported\r
- ////////////////////////////////////////////////////////////////////////////////\r
-\r
- extern unsigned char PersistentVersion;\r
-\r
- ////////////////////////////////////////////////////////////////////////////////\r
- // dump_context controls the formatting of a persistent dump\r
- ////////////////////////////////////////////////////////////////////////////////\r
-\r
- class dump_context\r
- {\r
- friend class persistent;\r
- public:\r
- //////////////////////////////////////////////////////////////////////////////\r
-\r
- // device must be in binary mode\r
- dump_context(std::ostream& device, unsigned char version = PersistentVersion) throw(persistent_dump_failed);\r
- ~dump_context(void);\r
-\r
- // low level output used to dump a byte\r
- void put(unsigned char data) throw(persistent_dump_failed);\r
-\r
- // access the device, for example to check the error status\r
- const std::ostream& device(void) const;\r
-\r
- // recover the version number of the dumped output\r
- unsigned char version(void) const;\r
-\r
- // test whether the current platform uses little-endian or big-endian addressing of bytes\r
- // this is used in dump/restore of integers and is exported so that other routines can use it\r
- bool little_endian(void) const;\r
-\r
- // Assist functions for Pointers\r
- // the return pair value is a flag saying whether this is a new pointer and the magic key to dump to file\r
- std::pair<bool,unsigned> pointer_map(const void* const pointer);\r
-\r
- // Assist functions for Polymorphous classes (i.e. subclasses) using callback approach\r
- typedef void (*dump_callback)(dump_context&,const void*);\r
- unsigned register_callback(const std::type_info& info, dump_callback);\r
- bool is_callback(const std::type_info& info) const;\r
- typedef std::pair<unsigned,dump_callback> callback_data;\r
- callback_data lookup_callback(const std::type_info&) const throw(persistent_illegal_type);\r
-\r
- // Assist functions for Polymorphous classes (i.e. subclasses) using interface approach\r
- unsigned register_interface(const std::type_info& info);\r
- bool is_interface(const std::type_info& info) const;\r
- unsigned lookup_interface(const std::type_info&) const throw(persistent_illegal_type);\r
-\r
- // Register all Polymorphous classes using either approach by calling an installer callback\r
- typedef void (*installer)(dump_context&);\r
- void register_all(installer);\r
-\r
- private:\r
- friend class dump_context_body;\r
- dump_context_body* m_body;\r
-\r
- // disallow copying by making assignment and copy constructor private\r
- dump_context(const dump_context&);\r
- dump_context& operator=(const dump_context&);\r
- };\r
-\r
- ////////////////////////////////////////////////////////////////////////////////\r
- // restore_context controls the reading of the persistent data during a restore\r
-\r
- class restore_context\r
- {\r
- friend class persistent;\r
- public:\r
- //////////////////////////////////////////////////////////////////////////////\r
-\r
- // device must be in binary mode\r
- restore_context(std::istream& device) throw(persistent_restore_failed);\r
- ~restore_context(void);\r
-\r
- // low level input used to restore a byte\r
- int get(void) throw(persistent_restore_failed);\r
-\r
- // access the device, for example to check the error status\r
- const std::istream& device(void) const;\r
-\r
- // access the version number of the input being restored\r
- unsigned char version(void) const;\r
-\r
- // test whether the current platform uses little-endian or big-endian addressing of bytes\r
- // this is used in dump/restore of integers\r
- bool little_endian(void) const;\r
-\r
- // Assist functions for Pointers\r
- std::pair<bool,void*> pointer_map(unsigned magic);\r
- void pointer_add(unsigned magic, void* new_pointer);\r
-\r
- // Assist functions for Polymorphous classes using the callback approach\r
- typedef void* (*create_callback)(void);\r
- typedef void (*restore_callback)(restore_context&,void*);\r
- unsigned register_callback(create_callback,restore_callback);\r
- bool is_callback(unsigned) const;\r
- typedef std::pair<create_callback, restore_callback> callback_data;\r
- callback_data lookup_callback(unsigned) const throw(persistent_illegal_type);\r
-\r
- // Assist functions for Polymorphous classes using the interface approach\r
- unsigned register_interface(persistent*);\r
- bool is_interface(unsigned) const;\r
- persistent* lookup_interface(unsigned) const throw(persistent_illegal_type);\r
-\r
- // Register all Polymorphous classes using either approach by calling an installer callback\r
- typedef void (*installer)(restore_context&);\r
- void register_all(installer);\r
-\r
- private:\r
- friend class restore_context_body;\r
- restore_context_body* m_body;\r
-\r
- typedef std::pair<unsigned,persistent*> interface_data;\r
-\r
- // disallow copying by making assignment and copy constructor private\r
- restore_context(const restore_context&);\r
- restore_context& operator=(const restore_context&);\r
- };\r
-\r
- ////////////////////////////////////////////////////////////////////////////////\r
-\r
-} // end namespace stlplus\r
-\r
- ////////////////////////////////////////////////////////////////////////////////\r
-#endif\r