summaryrefslogtreecommitdiff
path: root/libs/mpi/src/python/serialize.cpp
diff options
context:
space:
mode:
authorLorry Tar Creator <lorry-tar-importer@baserock.org>2013-06-25 22:59:01 +0000
committer <>2013-09-27 11:49:28 +0000
commit8c4528713d907ee2cfd3bfcbbad272c749867f84 (patch)
treec09e2ce80f47b90c85cc720f5139089ad9c8cfff /libs/mpi/src/python/serialize.cpp
downloadboost-tarball-baserock/morph.tar.gz
Imported from /home/lorry/working-area/delta_boost-tarball/boost_1_54_0.tar.bz2.boost_1_54_0baserock/morph
Diffstat (limited to 'libs/mpi/src/python/serialize.cpp')
-rw-r--r--libs/mpi/src/python/serialize.cpp79
1 files changed, 79 insertions, 0 deletions
diff --git a/libs/mpi/src/python/serialize.cpp b/libs/mpi/src/python/serialize.cpp
new file mode 100644
index 000000000..92004a340
--- /dev/null
+++ b/libs/mpi/src/python/serialize.cpp
@@ -0,0 +1,79 @@
+// (C) Copyright 2006 Douglas Gregor <doug.gregor -at- gmail.com>
+
+// Use, modification and distribution is subject to 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)
+
+// Authors: Douglas Gregor
+
+/** @file serialize.cpp
+ *
+ * This file provides Boost.Serialization support for Python objects.
+ */
+#include <boost/mpi/python/serialize.hpp>
+#include <boost/mpi/python/skeleton_and_content.hpp>
+#include <boost/mpi.hpp>
+
+namespace boost { namespace python {
+
+struct pickle::data_t {
+ object module;
+ object dumps;
+ object loads;
+};
+
+
+/// Data used for communicating with the Python `pickle' module.
+pickle::data_t* pickle::data;
+
+str pickle::dumps(object obj, int protocol)
+{
+ if (!data) initialize_data();
+ return extract<str>((data->dumps)(obj, protocol));
+}
+
+object pickle::loads(str s)
+{
+ if (!data) initialize_data();
+ return ((data->loads)(s));
+}
+
+void pickle::initialize_data()
+{
+ data = new data_t;
+ data->module = object(handle<>(PyImport_ImportModule("pickle")));
+ data->dumps = data->module.attr("dumps");
+ data->loads = data->module.attr("loads");
+}
+
+} } // end namespace boost::python
+
+BOOST_PYTHON_DIRECT_SERIALIZATION_ARCHIVE_IMPL(
+ ::boost::mpi::packed_iarchive,
+ ::boost::mpi::packed_oarchive)
+
+namespace boost { namespace mpi { namespace python { namespace detail {
+
+ boost::python::object skeleton_proxy_base_type;
+
+ // A map from Python type objects to skeleton/content handlers
+ typedef std::map<PyTypeObject*, skeleton_content_handler>
+ skeleton_content_handlers_type;
+
+ BOOST_MPI_PYTHON_DECL skeleton_content_handlers_type skeleton_content_handlers;
+
+ bool
+ skeleton_and_content_handler_registered(PyTypeObject* type)
+ {
+ return
+ skeleton_content_handlers.find(type) != skeleton_content_handlers.end();
+ }
+
+ void
+ register_skeleton_and_content_handler(PyTypeObject* type,
+ const skeleton_content_handler& handler)
+ {
+ skeleton_content_handlers[type] = handler;
+ }
+
+} } } } // end namespace boost::mpi::python::detail