merged from trunk

[SVN r48605]
This commit is contained in:
Eric Niebler
2008-09-05 04:13:30 +00:00
parent df3c9af238
commit 8aa03299b3
9 changed files with 131 additions and 19 deletions

View File

@ -0,0 +1,12 @@
/*=============================================================================
Copyright (c) 2001-2007 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_INCLUDE_AT_C)
#define FUSION_INCLUDE_AT_C
#include <boost/fusion/sequence/intrinsic/at_c.hpp>
#endif

View File

@ -4,8 +4,8 @@
Distributed under the Boost Software License, Version 1.0. (See accompanying 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) file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
==============================================================================*/ ==============================================================================*/
#if !defined(FUSION_INCLUDE_BEGIN) #if !defined(FUSION_INCLUDE_END)
#define FUSION_INCLUDE_BEGIN #define FUSION_INCLUDE_END
#include <boost/fusion/sequence/intrinsic/end.hpp> #include <boost/fusion/sequence/intrinsic/end.hpp>

View File

@ -0,0 +1,13 @@
/*=============================================================================
Copyright (c) 2001-2006 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_AT_C_08252008_0308)
#define FUSION_AT_C_08252008_0308
#include <boost/fusion/sequence/intrinsic/at.hpp>
#endif

View File

@ -1,19 +1,19 @@
/*============================================================================= /*=============================================================================
Copyright (c) 2001-2006 Joel de Guzman Copyright (c) 2001-2006 Joel de Guzman
Distributed under the Boost Software License, Version 1.0. (See accompanying 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) file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
==============================================================================*/ ==============================================================================*/
#ifndef BOOST_PP_IS_ITERATING #ifndef BOOST_PP_IS_ITERATING
#if !defined(FUSION_TUPLE_FORWARD_CTOR_10032005_0815) #if !defined(FUSION_TUPLE_EXPAND_10032005_0815)
#define FUSION_TUPLE_FORWARD_CTOR_10032005_0815 #define FUSION_TUPLE_EXPAND_10032005_0815
#include <boost/preprocessor/iterate.hpp> #include <boost/preprocessor/iterate.hpp>
#include <boost/preprocessor/repetition/enum_params.hpp> #include <boost/preprocessor/repetition/enum_params.hpp>
#include <boost/preprocessor/repetition/enum_binary_params.hpp> #include <boost/preprocessor/repetition/enum_binary_params.hpp>
#define BOOST_PP_FILENAME_1 \ #define BOOST_PP_FILENAME_1 \
<boost/fusion/tuple/detail/tuple_forward_ctor.hpp> <boost/fusion/tuple/detail/tuple_expand.hpp>
#define BOOST_PP_ITERATION_LIMITS (1, FUSION_MAX_VECTOR_SIZE) #define BOOST_PP_ITERATION_LIMITS (1, FUSION_MAX_VECTOR_SIZE)
#include BOOST_PP_ITERATE() #include BOOST_PP_ITERATE()
@ -34,6 +34,17 @@
N, typename detail::call_param<T, >::type _)) N, typename detail::call_param<T, >::type _))
: base_type(BOOST_PP_ENUM_PARAMS(N, _)) {} : base_type(BOOST_PP_ENUM_PARAMS(N, _)) {}
template <BOOST_PP_ENUM_PARAMS(N, typename U)>
tuple(tuple<BOOST_PP_ENUM_PARAMS(N, U)> const& rhs)
: base_type(rhs) {}
template <BOOST_PP_ENUM_PARAMS(N, typename U)>
tuple& operator=(tuple<BOOST_PP_ENUM_PARAMS(N, U)> const& rhs)
{
base_type::operator=(rhs);
return *this;
}
#undef N #undef N
#endif // defined(BOOST_PP_IS_ITERATING) #endif // defined(BOOST_PP_IS_ITERATING)

View File

@ -1,7 +1,7 @@
/*============================================================================= /*=============================================================================
Copyright (c) 2005 Joel de Guzman Copyright (c) 2005 Joel de Guzman
Distributed under the Boost Software License, Version 1.0. (See accompanying 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) file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
==============================================================================*/ ==============================================================================*/
#if !defined(FUSION_TUPLE_10032005_0810) #if !defined(FUSION_TUPLE_10032005_0810)
@ -16,6 +16,7 @@
#include <boost/fusion/sequence/io.hpp> #include <boost/fusion/sequence/io.hpp>
#include <boost/utility/enable_if.hpp> #include <boost/utility/enable_if.hpp>
#include <boost/type_traits/is_const.hpp> #include <boost/type_traits/is_const.hpp>
#include <utility>
namespace boost { namespace fusion namespace boost { namespace fusion
{ {
@ -23,35 +24,50 @@ namespace boost { namespace fusion
struct tuple : vector<BOOST_PP_ENUM_PARAMS(FUSION_MAX_VECTOR_SIZE, T)> struct tuple : vector<BOOST_PP_ENUM_PARAMS(FUSION_MAX_VECTOR_SIZE, T)>
{ {
typedef vector< typedef vector<
BOOST_PP_ENUM_PARAMS(FUSION_MAX_VECTOR_SIZE, T)> BOOST_PP_ENUM_PARAMS(FUSION_MAX_VECTOR_SIZE, T)>
base_type; base_type;
tuple() tuple()
: base_type() {} : base_type() {}
template <typename Sequence> tuple(tuple const& rhs)
tuple(Sequence const& rhs)
: base_type(rhs) {} : base_type(rhs) {}
#include <boost/fusion/tuple/detail/tuple_forward_ctor.hpp> 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> template <typename T>
tuple& tuple& operator=(T const& rhs)
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); base_type::operator=(rhs);
return *this; return *this;
} }
}; };
template <typename Tuple> template <typename Tuple>
struct tuple_size : result_of::size<Tuple> {}; struct tuple_size : result_of::size<Tuple> {};
template <int N, typename Tuple> template <int N, typename Tuple>
struct tuple_element : result_of::value_at_c<Tuple, N> {}; struct tuple_element : result_of::value_at_c<Tuple, N> {};
template <int N, typename Tuple> template <int N, typename Tuple>
inline typename inline typename
lazy_disable_if< lazy_disable_if<
is_const<Tuple> is_const<Tuple>
, result_of::at_c<Tuple, N> , result_of::at_c<Tuple, N>

View File

@ -89,6 +89,7 @@ import testing ;
[ run sequence/tuple_misc.cpp : : : : ] [ run sequence/tuple_misc.cpp : : : : ]
[ run sequence/tuple_mutate.cpp : : : : ] [ run sequence/tuple_mutate.cpp : : : : ]
[ run sequence/tuple_tie.cpp : : : : ] [ run sequence/tuple_tie.cpp : : : : ]
[ run sequence/tr1_tuple_auto_conv.cpp : : : : ]
[ run sequence/transform_view.cpp : : : : ] [ run sequence/transform_view.cpp : : : : ]
[ run sequence/vector_comparison.cpp : : : : ] [ run sequence/vector_comparison.cpp : : : : ]
[ run sequence/vector_construction.cpp : : : : ] [ run sequence/vector_construction.cpp : : : : ]

View File

@ -2,7 +2,7 @@
Copyright (c) 1999-2003 Jaakko Jarvi Copyright (c) 1999-2003 Jaakko Jarvi
Copyright (c) 2001-2006 Joel de Guzman Copyright (c) 2001-2006 Joel de Guzman
Distributed under the Boost Software License, Version 1.0. (See accompanying 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) file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
==============================================================================*/ ==============================================================================*/
#include <boost/detail/lightweight_test.hpp> #include <boost/detail/lightweight_test.hpp>
@ -57,7 +57,9 @@ test()
FUSION_SEQUENCE<> empty0; FUSION_SEQUENCE<> empty0;
#ifndef TR1_TUPLE_TEST
FUSION_SEQUENCE<> empty1(empty); FUSION_SEQUENCE<> empty1(empty);
#endif
FUSION_SEQUENCE<int> t1; FUSION_SEQUENCE<int> t1;
BOOST_TEST(FUSION_AT<0>(t1) == int()); BOOST_TEST(FUSION_AT<0>(t1) == int());

View File

@ -0,0 +1,56 @@
#include <boost/tr1/memory.hpp>
#include <boost/tr1/tuple.hpp>
#include <boost/any.hpp>
#include <iostream>
namespace Core
{
class AutoConverter
{
std::tr1::shared_ptr<boost::any> t_;
public:
AutoConverter(std::tr1::shared_ptr<boost::any> const & t)
: t_(t)
{}
template <typename C>
operator C ()
{
try
{
boost::any & a = (*t_);
return boost::any_cast<C>(a);
}
catch(boost::bad_any_cast & e)
{
std::cerr << "Internal conversion bug: "
<< "Failed to convert data holder to "
<< typeid(C).name() << "\n"
<< e.what()
<< std::endl;
C c = C();
return c;
}
}
};
inline AutoConverter Demo()
{
std::tr1::shared_ptr<boost::any> p_result
(new boost::any(std::tr1::make_tuple(1, 2, 3, 4)));
return p_result;
}
} // namespace Core
int main(int argc, char* argv[])
{
std::tr1::tuple<int, int, int, int> test = Core::Demo();
return 0;
}

View File

@ -2,12 +2,13 @@
Copyright (c) 1999-2003 Jaakko Jarvi Copyright (c) 1999-2003 Jaakko Jarvi
Copyright (c) 2001-2006 Joel de Guzman Copyright (c) 2001-2006 Joel de Guzman
Distributed under the Boost Software License, Version 1.0. (See accompanying 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) file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
==============================================================================*/ ==============================================================================*/
#include <boost/fusion/tuple/tuple.hpp> #include <boost/fusion/tuple/tuple.hpp>
#include <boost/fusion/adapted/mpl.hpp> #include <boost/fusion/adapted/mpl.hpp>
#define TR1_TUPLE_TEST
#define FUSION_SEQUENCE tuple #define FUSION_SEQUENCE tuple
#define FUSION_AT get #define FUSION_AT get
#include "construction.hpp" #include "construction.hpp"