Chris@16: // Copyright David Abrahams 2002. Chris@16: // Distributed under the Boost Software License, Version 1.0. (See Chris@16: // accompanying file LICENSE_1_0.txt or copy at Chris@16: // http://www.boost.org/LICENSE_1_0.txt) Chris@16: #ifndef TUPLE_20020706_HPP Chris@16: #define TUPLE_20020706_HPP Chris@16: Chris@16: # include Chris@16: Chris@16: #include Chris@16: #include Chris@16: #include Chris@16: #include Chris@16: Chris@16: namespace boost { namespace python { Chris@16: Chris@16: namespace detail Chris@16: { Chris@16: struct BOOST_PYTHON_DECL tuple_base : object Chris@16: { Chris@16: protected: Chris@16: tuple_base(); Chris@16: tuple_base(object_cref sequence); Chris@16: Chris@16: BOOST_PYTHON_FORWARD_OBJECT_CONSTRUCTORS(tuple_base, object) Chris@16: Chris@16: private: Chris@16: static detail::new_reference call(object const&); Chris@16: }; Chris@16: } Chris@16: Chris@16: class tuple : public detail::tuple_base Chris@16: { Chris@16: typedef detail::tuple_base base; Chris@16: public: Chris@16: tuple() {} Chris@16: Chris@16: template Chris@16: explicit tuple(T const& sequence) Chris@16: : base(object(sequence)) Chris@16: { Chris@16: } Chris@16: Chris@16: public: // implementation detail -- for internal use only Chris@16: BOOST_PYTHON_FORWARD_OBJECT_CONSTRUCTORS(tuple, base) Chris@16: }; Chris@16: Chris@16: // Chris@16: // Converter Specializations // $$$ JDG $$$ moved here to prevent Chris@16: // // G++ bug complaining specialization Chris@16: // provided after instantiation Chris@16: namespace converter Chris@16: { Chris@16: template <> Chris@16: struct object_manager_traits Chris@16: : pytype_object_manager_traits<&PyTuple_Type,tuple> Chris@16: { Chris@16: }; Chris@16: } Chris@16: Chris@16: // for completeness Chris@16: inline tuple make_tuple() { return tuple(); } Chris@16: Chris@16: # define BOOST_PP_ITERATION_PARAMS_1 (3, (1, BOOST_PYTHON_MAX_ARITY, )) Chris@16: # include BOOST_PP_ITERATE() Chris@16: Chris@16: }} // namespace boost::python Chris@16: Chris@16: #endif Chris@16: