• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 LONG_DWA2002627_HPP
6 # define LONG_DWA2002627_HPP
7 
8 # include <boost/python/detail/prefix.hpp>
9 
10 # include <boost/python/object.hpp>
11 # include <boost/python/converter/pytype_object_mgr_traits.hpp>
12 
13 namespace boost { namespace python {
14 
15 namespace detail
16 {
17   struct BOOST_PYTHON_DECL long_base : object
18   {
19    protected:
20       long_base(); // new long_
21       explicit long_base(object_cref rhs);
22       explicit long_base(object_cref rhs, object_cref base);
23 
24       BOOST_PYTHON_FORWARD_OBJECT_CONSTRUCTORS(long_base, object)
25 
26    private:
27       static detail::new_non_null_reference call(object const&);
28       static detail::new_non_null_reference call(object const&, object const&);
29   };
30 }
31 
32 class long_ : public detail::long_base
33 {
34     typedef detail::long_base base;
35  public:
long_()36     long_() {} // new long_
37 
38     template <class T>
long_(T const & rhs)39     explicit long_(T const& rhs)
40         : detail::long_base(object(rhs))
41     {
42     }
43 
44     template <class T, class U>
long_(T const & rhs,U const & base)45     explicit long_(T const& rhs, U const& base)
46         : detail::long_base(object(rhs), object(base))
47     {
48     }
49 
50  public: // implementation detail -- for internal use only
51     BOOST_PYTHON_FORWARD_OBJECT_CONSTRUCTORS(long_, base)
52 };
53 
54 //
55 // Converter Specializations
56 //
57 namespace converter
58 {
59   template <>
60   struct object_manager_traits<long_>
61       : pytype_object_manager_traits<&PyLong_Type,long_>
62   {
63   };
64 }
65 
66 }} // namespace boost::python
67 
68 #endif // LONG_DWA2002627_HPP
69