ossrv_pub/boost_apis/boost/python/tuple.hpp
changeset 0 e4d67989cc36
equal deleted inserted replaced
-1:000000000000 0:e4d67989cc36
       
     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 TUPLE_20020706_HPP
       
     6 #define TUPLE_20020706_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 #include <boost/preprocessor/enum_params.hpp>
       
    13 #include <boost/preprocessor/repetition/enum_binary_params.hpp>
       
    14 
       
    15 namespace boost { namespace python {
       
    16 
       
    17 namespace detail
       
    18 {
       
    19   struct BOOST_PYTHON_DECL tuple_base : object
       
    20   {
       
    21    protected:
       
    22       tuple_base();
       
    23       tuple_base(object_cref sequence);
       
    24       
       
    25       BOOST_PYTHON_FORWARD_OBJECT_CONSTRUCTORS(tuple_base, object)
       
    26 
       
    27    private:
       
    28       static detail::new_reference call(object const&);
       
    29   };
       
    30 }
       
    31 
       
    32 class tuple : public detail::tuple_base
       
    33 {
       
    34     typedef detail::tuple_base base;
       
    35  public:
       
    36     tuple() {}
       
    37 
       
    38     template <class T>
       
    39     explicit tuple(T const& sequence)
       
    40         : base(object(sequence))
       
    41     {
       
    42     }
       
    43 
       
    44  public: // implementation detail -- for internal use only
       
    45     BOOST_PYTHON_FORWARD_OBJECT_CONSTRUCTORS(tuple, base)
       
    46 };
       
    47 
       
    48 //
       
    49 // Converter Specializations    // $$$ JDG $$$ moved here to prevent
       
    50 //                              // G++ bug complaining specialization
       
    51                                 // provided after instantiation
       
    52 namespace converter
       
    53 {
       
    54   template <>
       
    55   struct object_manager_traits<tuple>
       
    56       : pytype_object_manager_traits<&PyTuple_Type,tuple>
       
    57   {
       
    58   };
       
    59 }
       
    60 
       
    61 // for completeness
       
    62 inline tuple make_tuple() { return tuple(); }
       
    63 
       
    64 # define BOOST_PP_ITERATION_PARAMS_1 (3, (1, BOOST_PYTHON_MAX_ARITY, <boost/python/detail/make_tuple.hpp>))
       
    65 # include BOOST_PP_ITERATE()
       
    66 
       
    67 }}  // namespace boost::python
       
    68 
       
    69 #endif
       
    70