123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124 |
- // (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
|