diff -r 2fe1408b6811 -r e1b950c65cb4 epoc32/include/stdapis/boost/variant/detail/move.hpp --- a/epoc32/include/stdapis/boost/variant/detail/move.hpp Tue Mar 16 16:12:26 2010 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,166 +0,0 @@ -//----------------------------------------------------------------------------- -// boost variant/detail/move.hpp header file -// See http://www.boost.org for updates, documentation, and revision history. -//----------------------------------------------------------------------------- -// -// Copyright (c) 2002-2003 Eric Friedman -// Copyright (c) 2002 by Andrei Alexandrescu -// -// Use, modification and distribution are subject to 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) -// -// This file derivative of MoJO. Much thanks to Andrei for his initial work. -// See for information on MOJO. -// Re-issued here under the Boost Software License, with permission of the original -// author (Andrei Alexandrescu). - - -#ifndef BOOST_VARIANT_DETAIL_MOVE_HPP -#define BOOST_VARIANT_DETAIL_MOVE_HPP - -#include // for iterator_traits -#include // for placement new - -#include "boost/config.hpp" -#include "boost/detail/workaround.hpp" -#include "boost/mpl/if.hpp" -#include "boost/type_traits/is_base_and_derived.hpp" - -namespace boost { -namespace detail { namespace variant { - -////////////////////////////////////////////////////////////////////////// -// forward declares -// -// NOTE: Incomplete until (if?) Boost.Move becomes part of Boost. -// -template class moveable; -template class move_source; -template class move_return; - -namespace detail { - -// (detail) moveable_tag -// -// Concrete type from which moveable derives. -// -// TODO: Move into moveable_fwd.hpp and define has_move_constructor. -// -template -struct moveable_tag -{ -}; - -} // namespace detail - -////////////////////////////////////////////////////////////////////////// -// function template move -// -// Takes a T& and returns, if T derives moveable, a move_source for -// the object; else, returns the T&. -// - -namespace detail { - -// (detail) class template move_type -// -// Metafunction that, given moveable T, provides move_source, else T&. -// -template -struct move_type -{ -public: // metafunction result - - typedef typename mpl::if_< - is_base_and_derived, T> - , move_source - , T& - >::type type; - -}; - -} // namespace detail - -template -inline - typename detail::move_type::type -move(T& source) -{ - typedef typename detail::move_type::type - move_t; - - return move_t(source); -} - -////////////////////////////////////////////////////////////////////////// -// class template return_t -// -// Metafunction that, given moveable T, provides move_return, else T. -// -template -struct return_t -{ -public: // metafunction result - - typedef typename mpl::if_< - is_base_and_derived, T> - , move_return - , T - >::type type; - -}; - -////////////////////////////////////////////////////////////////////////// -// function template move_swap -// -// Swaps using Koenig lookup but falls back to move-swap for primitive -// types and on non-conforming compilers. -// - -#if defined(BOOST_NO_ARGUMENT_DEPENDENT_LOOKUP) \ - || BOOST_WORKAROUND(__GNUC__, BOOST_TESTED_AT(2)) - -// [Indicate that move_swap by overload is disabled...] -#define BOOST_NO_MOVE_SWAP_BY_OVERLOAD - -// [...and provide straight swap-by-move implementation:] -template -inline void move_swap(T& lhs, T& rhs) -{ - T tmp( boost::detail::variant::move(lhs) ); - lhs = boost::detail::variant::move(rhs); - rhs = boost::detail::variant::move(tmp); -} - -#else// !workaround - -namespace detail { namespace move_swap { - -template -inline void swap(T& lhs, T& rhs) -{ - T tmp( boost::detail::variant::move(lhs) ); - lhs = boost::detail::variant::move(rhs); - rhs = boost::detail::variant::move(tmp); -} - -}} // namespace detail::move_swap - -template -inline void move_swap(T& lhs, T& rhs) -{ - using detail::move_swap::swap; - - swap(lhs, rhs); -} - -#endif // workaround - -}} // namespace detail::variant -} // namespace boost - -#endif // BOOST_VARIANT_DETAIL_MOVE_HPP - - -