// (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 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 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 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 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 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 static void register_( Class_&, ...) { typedef typename error_messages::missing_pickle_suite_function_or_incorrect_signature< Class_>::error_type error_type BOOST_ATTRIBUTE_UNUSED; } }; template struct pickle_suite_finalize : PickleSuiteType, pickle_suite_registration {}; } // namespace detail }} // namespace boost::python #endif // BOOST_PYTHON_OBJECT_PICKLE_SUPPORT_RWGK20020603_HPP