/*============================================================================= | |
Copyright (c) 2005 Joel de Guzman | |
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) | |
==============================================================================*/ | |
#if !defined(FUSION_TUPLE_10032005_0810) | |
#define FUSION_TUPLE_10032005_0810 | |
#include <boost/fusion/tuple/tuple_fwd.hpp> | |
#include <boost/fusion/container/vector/vector.hpp> | |
#include <boost/fusion/sequence/intrinsic/size.hpp> | |
#include <boost/fusion/sequence/intrinsic/value_at.hpp> | |
#include <boost/fusion/sequence/intrinsic/at.hpp> | |
#include <boost/fusion/sequence/comparison.hpp> | |
#include <boost/fusion/sequence/io.hpp> | |
#include <boost/utility/enable_if.hpp> | |
#include <boost/type_traits/is_const.hpp> | |
#include <boost/config/no_tr1/utility.hpp> | |
namespace boost { namespace fusion | |
{ | |
template <BOOST_PP_ENUM_PARAMS(FUSION_MAX_VECTOR_SIZE, typename T)> | |
struct tuple : vector<BOOST_PP_ENUM_PARAMS(FUSION_MAX_VECTOR_SIZE, T)> | |
{ | |
typedef vector< | |
BOOST_PP_ENUM_PARAMS(FUSION_MAX_VECTOR_SIZE, T)> | |
base_type; | |
tuple() | |
: base_type() {} | |
tuple(tuple const& rhs) | |
: base_type(rhs) {} | |
template <typename U1, typename U2> | |
tuple(std::pair<U1, U2> const& rhs) | |
: base_type(rhs) {} | |
#include <boost/fusion/tuple/detail/tuple_expand.hpp> | |
template <typename T> | |
tuple& operator=(T const& rhs) | |
{ | |
base_type::operator=(rhs); | |
return *this; | |
} | |
tuple& operator=(tuple const& rhs) | |
{ | |
base_type::operator=(rhs); | |
return *this; | |
} | |
template <typename U1, typename U2> | |
tuple& operator=(std::pair<U1, U2> const& rhs) | |
{ | |
base_type::operator=(rhs); | |
return *this; | |
} | |
}; | |
template <typename Tuple> | |
struct tuple_size : result_of::size<Tuple> {}; | |
template <int N, typename Tuple> | |
struct tuple_element : result_of::value_at_c<Tuple, N> {}; | |
template <int N, typename Tuple> | |
inline typename | |
lazy_disable_if< | |
is_const<Tuple> | |
, result_of::at_c<Tuple, N> | |
>::type | |
get(Tuple& tup) | |
{ | |
return at_c<N>(tup); | |
} | |
template <int N, typename Tuple> | |
inline typename result_of::at_c<Tuple const, N>::type | |
get(Tuple const& tup) | |
{ | |
return at_c<N>(tup); | |
} | |
}} | |
#endif |