71 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			C++
		
	
	
	
		
		
			
		
	
	
			71 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			C++
		
	
	
	
|  | // 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 TUPLE_20020706_HPP
 | ||
|  | #define TUPLE_20020706_HPP
 | ||
|  | 
 | ||
|  | # include <boost/python/detail/prefix.hpp>
 | ||
|  | 
 | ||
|  | #include <boost/python/object.hpp>
 | ||
|  | #include <boost/python/converter/pytype_object_mgr_traits.hpp>
 | ||
|  | #include <boost/preprocessor/enum_params.hpp>
 | ||
|  | #include <boost/preprocessor/repetition/enum_binary_params.hpp>
 | ||
|  | 
 | ||
|  | namespace boost { namespace python { | ||
|  | 
 | ||
|  | namespace detail | ||
|  | { | ||
|  |   struct BOOST_PYTHON_DECL tuple_base : object | ||
|  |   { | ||
|  |    protected: | ||
|  |       tuple_base(); | ||
|  |       tuple_base(object_cref sequence); | ||
|  |        | ||
|  |       BOOST_PYTHON_FORWARD_OBJECT_CONSTRUCTORS(tuple_base, object) | ||
|  | 
 | ||
|  |    private: | ||
|  |       static detail::new_reference call(object const&); | ||
|  |   }; | ||
|  | } | ||
|  | 
 | ||
|  | class tuple : public detail::tuple_base | ||
|  | { | ||
|  |     typedef detail::tuple_base base; | ||
|  |  public: | ||
|  |     tuple() {} | ||
|  | 
 | ||
|  |     template <class T> | ||
|  |     explicit tuple(T const& sequence) | ||
|  |         : base(object(sequence)) | ||
|  |     { | ||
|  |     } | ||
|  | 
 | ||
|  |  public: // implementation detail -- for internal use only
 | ||
|  |     BOOST_PYTHON_FORWARD_OBJECT_CONSTRUCTORS(tuple, base) | ||
|  | }; | ||
|  | 
 | ||
|  | //
 | ||
|  | // Converter Specializations    // $$$ JDG $$$ moved here to prevent
 | ||
|  | //                              // G++ bug complaining specialization
 | ||
|  |                                 // provided after instantiation
 | ||
|  | namespace converter | ||
|  | { | ||
|  |   template <> | ||
|  |   struct object_manager_traits<tuple> | ||
|  |       : pytype_object_manager_traits<&PyTuple_Type,tuple> | ||
|  |   { | ||
|  |   }; | ||
|  | } | ||
|  | 
 | ||
|  | // for completeness
 | ||
|  | inline tuple make_tuple() { return tuple(); } | ||
|  | 
 | ||
|  | # define BOOST_PP_ITERATION_PARAMS_1 (3, (1, BOOST_PYTHON_MAX_ARITY, <boost/python/detail/make_tuple.hpp>))
 | ||
|  | # include BOOST_PP_ITERATE()
 | ||
|  | 
 | ||
|  | }}  // namespace boost::python
 | ||
|  | 
 | ||
|  | #endif
 | ||
|  | 
 |