// Copyright David Abrahams 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 LONG_DWA2002627_HPP

# define LONG_DWA2002627_HPP



# include <boost/python/detail/prefix.hpp>



# include <boost/python/object.hpp>

# include <boost/python/converter/pytype_object_mgr_traits.hpp>



namespace boost { namespace python { 



namespace detail

{

  struct BOOST_PYTHON_DECL long_base : object

  {

   protected:

      long_base(); // new long_

      explicit long_base(object_cref rhs);

      explicit long_base(object_cref rhs, object_cref base);

      

      BOOST_PYTHON_FORWARD_OBJECT_CONSTRUCTORS(long_base, object)

          

   private:

      static detail::new_non_null_reference call(object const&);

      static detail::new_non_null_reference call(object const&, object const&);

  };

}



class long_ : public detail::long_base

{

    typedef detail::long_base base;

 public:

    long_() {} // new long_



    template <class T>

    explicit long_(T const& rhs)

        : detail::long_base(object(rhs))

    {

    }



    template <class T, class U>

    explicit long_(T const& rhs, U const& base)

        : detail::long_base(object(rhs), object(base))

    {

    }

    

 public: // implementation detail -- for internal use only

    BOOST_PYTHON_FORWARD_OBJECT_CONSTRUCTORS(long_, base)

};



//

// Converter Specializations

//

namespace converter

{

  template <>

  struct object_manager_traits<long_>

      : pytype_object_manager_traits<&PyLong_Type,long_>

  {

  };

}



}} // namespace boost::python



#endif // LONG_DWA2002627_HPP

