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