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