/*!
*
*
* \brief -
*
* \author -
* \date -
*
*
* \par Copyright 1995-2017 Shark Development Team
*
*
* This file is part of Shark.
*
*
* Shark is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published
* by the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* Shark is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with Shark. If not, see .
*
*/
/*=============================================================================
Copyright (c) 2001-2011 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_COPY_02162011_2308)
#define FUSION_COPY_02162011_2308
#include
#include
#include
#include
#include
#include
#include
#include
#if defined (BOOST_MSVC)
# pragma warning(push)
# pragma warning (disable: 4100) // unreferenced formal parameter
#endif
namespace boost { namespace fusion
{
namespace detail
{
template
struct sequence_copy
{
typedef typename result_of::end::type end1_type;
typedef typename result_of::end::type end2_type;
template
static void
call(I1 const&, I2 const&, mpl::true_)
{
}
template
static void
call(I1 const& src, I2 const& dest, mpl::false_)
{
*dest = *src;
call(fusion::next(src), fusion::next(dest));
}
template
static void
call(I1 const& src, I2 const& dest)
{
typename result_of::equal_to::type eq;
return call(src, dest, eq);
}
};
}
template
inline
typename
enable_if_c<
type_traits::ice_and<
traits::is_sequence::value
, traits::is_sequence::value
>::value,
void
>::type
copy(Seq1 const& src, Seq2& dest)
{
static_assert( result_of::size::value == result_of::size::value, "Sequences must have the same size");
detail::sequence_copy<
Seq1 const, Seq2>::
call(fusion::begin(src), fusion::begin(dest));
}
}}
#if defined (BOOST_MSVC)
# pragma warning(pop)
#endif
#endif