source: NonGTP/Boost/boost/python/converter/registrations.hpp @ 857

Revision 857, 2.6 KB checked in by igarcia, 18 years ago (diff)
Line 
1// Copyright David Abrahams 2002.
2// Distributed under the Boost Software License, Version 1.0. (See
3// accompanying file LICENSE_1_0.txt or copy at
4// http://www.boost.org/LICENSE_1_0.txt)
5#ifndef REGISTRATIONS_DWA2002223_HPP
6# define REGISTRATIONS_DWA2002223_HPP
7
8# include <boost/python/detail/prefix.hpp>
9
10# include <boost/python/type_id.hpp>
11
12# include <boost/python/converter/convertible_function.hpp>
13# include <boost/python/converter/constructor_function.hpp>
14# include <boost/python/converter/to_python_function_type.hpp>
15
16# include <boost/detail/workaround.hpp>
17
18namespace boost { namespace python { namespace converter {
19
20struct lvalue_from_python_chain
21{
22    convertible_function convert;
23    lvalue_from_python_chain* next;
24};
25
26struct rvalue_from_python_chain
27{
28    convertible_function convertible;
29    constructor_function construct;
30    rvalue_from_python_chain* next;
31};
32
33struct BOOST_PYTHON_DECL registration
34{
35 public: // member functions
36    explicit registration(type_info target, bool is_shared_ptr = false);
37   
38    // Convert the appropriately-typed data to Python
39    PyObject* to_python(void const volatile*) const;
40
41    // Return the class object, or raise an appropriate Python
42    // exception if no class has been registered.
43    PyTypeObject* get_class_object() const;
44
45 public: // data members. So sue me.
46    const python::type_info target_type;
47
48    // The chain of eligible from_python converters when an lvalue is required
49    lvalue_from_python_chain* lvalue_chain;
50
51    // The chain of eligible from_python converters when an rvalue is acceptable
52    rvalue_from_python_chain* rvalue_chain;
53   
54    // The class object associated with this type
55    PyTypeObject* m_class_object;
56
57    // The unique to_python converter for the associated C++ type.
58    to_python_function_t m_to_python;
59
60    // True iff this type is a shared_ptr.  Needed for special rvalue
61    // from_python handling.
62    const bool is_shared_ptr;
63
64# if BOOST_WORKAROUND(__MWERKS__, BOOST_TESTED_AT(0x3003))
65 private:
66    void operator=(registration); // This is not defined, and just keeps MWCW happy.
67# endif
68};
69
70//
71// implementations
72//
73inline registration::registration(type_info target_type, bool is_shared_ptr)
74    : target_type(target_type)
75      , lvalue_chain(0)
76      , rvalue_chain(0)
77      , m_class_object(0)
78      , m_to_python(0)
79      , is_shared_ptr(is_shared_ptr)
80{}
81
82inline bool operator<(registration const& lhs, registration const& rhs)
83{
84    return lhs.target_type < rhs.target_type;
85}
86
87}}} // namespace boost::python::converter
88
89#endif // REGISTRATIONS_DWA2002223_HPP
Note: See TracBrowser for help on using the repository browser.