125 lines
		
	
	
		
			3.2 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			125 lines
		
	
	
		
			3.2 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| //  (C) Copyright R.W. Grosse-Kunstleve 2002.
 | |
| //  Distributed under the Boost Software License, Version 1.0. (See
 | |
| //  accompanying file LICENSE_1_0.txt or copy at
 | |
| //  http://www.boost.org/LICENSE_1_0.txt)
 | |
| #ifndef BOOST_PYTHON_OBJECT_PICKLE_SUPPORT_RWGK20020603_HPP
 | |
| # define BOOST_PYTHON_OBJECT_PICKLE_SUPPORT_RWGK20020603_HPP
 | |
| 
 | |
| # include <boost/python/detail/prefix.hpp>
 | |
| 
 | |
| namespace boost { namespace python {
 | |
| 
 | |
| namespace api
 | |
| {
 | |
|   class object;
 | |
| }
 | |
| using api::object;
 | |
| class tuple;
 | |
| 
 | |
| BOOST_PYTHON_DECL object const& make_instance_reduce_function();
 | |
| 
 | |
| struct pickle_suite;
 | |
| 
 | |
| namespace error_messages {
 | |
| 
 | |
|   template <class T>
 | |
|   struct missing_pickle_suite_function_or_incorrect_signature {};
 | |
| 
 | |
|   inline void must_be_derived_from_pickle_suite(pickle_suite const&) {}
 | |
| }
 | |
| 
 | |
| namespace detail { struct pickle_suite_registration; }
 | |
| 
 | |
| struct pickle_suite
 | |
| {
 | |
|   private:
 | |
|     struct inaccessible {};
 | |
|     friend struct detail::pickle_suite_registration;
 | |
|   public:
 | |
|     static inaccessible* getinitargs() { return 0; }
 | |
|     static inaccessible* getstate() { return 0; }
 | |
|     static inaccessible* setstate() { return 0; }
 | |
|     static bool getstate_manages_dict() { return false; }
 | |
| };
 | |
| 
 | |
| namespace detail {
 | |
| 
 | |
|   struct pickle_suite_registration
 | |
|   {
 | |
|     typedef pickle_suite::inaccessible inaccessible;
 | |
| 
 | |
|     template <class Class_, class Tgetinitargs>
 | |
|     static
 | |
|     void
 | |
|     register_(
 | |
|       Class_& cl,
 | |
|       tuple (*getinitargs_fn)(Tgetinitargs),
 | |
|       inaccessible* (* /*getstate_fn*/)(),
 | |
|       inaccessible* (* /*setstate_fn*/)(),
 | |
|       bool)
 | |
|     {
 | |
|       cl.enable_pickling_(false);
 | |
|       cl.def("__getinitargs__", getinitargs_fn);
 | |
|     }
 | |
| 
 | |
|     template <class Class_,
 | |
|               class Rgetstate, class Tgetstate,
 | |
|               class Tsetstate, class Ttuple>
 | |
|     static
 | |
|     void
 | |
|     register_(
 | |
|       Class_& cl,
 | |
|       inaccessible* (* /*getinitargs_fn*/)(),
 | |
|       Rgetstate (*getstate_fn)(Tgetstate),
 | |
|       void (*setstate_fn)(Tsetstate, Ttuple),
 | |
|       bool getstate_manages_dict)
 | |
|     {
 | |
|       cl.enable_pickling_(getstate_manages_dict);
 | |
|       cl.def("__getstate__", getstate_fn);
 | |
|       cl.def("__setstate__", setstate_fn);
 | |
|     }
 | |
| 
 | |
|     template <class Class_,
 | |
|               class Tgetinitargs,
 | |
|               class Rgetstate, class Tgetstate,
 | |
|               class Tsetstate, class Ttuple>
 | |
|     static
 | |
|     void
 | |
|     register_(
 | |
|       Class_& cl,
 | |
|       tuple (*getinitargs_fn)(Tgetinitargs),
 | |
|       Rgetstate (*getstate_fn)(Tgetstate),
 | |
|       void (*setstate_fn)(Tsetstate, Ttuple),
 | |
|       bool getstate_manages_dict)
 | |
|     {
 | |
|       cl.enable_pickling_(getstate_manages_dict);
 | |
|       cl.def("__getinitargs__", getinitargs_fn);
 | |
|       cl.def("__getstate__", getstate_fn);
 | |
|       cl.def("__setstate__", setstate_fn);
 | |
|     }
 | |
| 
 | |
|     template <class Class_>
 | |
|     static
 | |
|     void
 | |
|     register_(
 | |
|       Class_&,
 | |
|       ...)
 | |
|     {
 | |
|       typedef typename
 | |
|         error_messages::missing_pickle_suite_function_or_incorrect_signature<
 | |
|           Class_>::error_type error_type BOOST_ATTRIBUTE_UNUSED;
 | |
|     }
 | |
|   };
 | |
| 
 | |
|   template <typename PickleSuiteType>
 | |
|   struct pickle_suite_finalize
 | |
|   : PickleSuiteType,
 | |
|     pickle_suite_registration
 | |
|   {};
 | |
| 
 | |
| } // namespace detail
 | |
| 
 | |
| }} // namespace boost::python
 | |
| 
 | |
| #endif // BOOST_PYTHON_OBJECT_PICKLE_SUPPORT_RWGK20020603_HPP
 | 
