~ubuntu-branches/ubuntu/wily/bombono-dvd/wily

« back to all changes in this revision

Viewing changes to libs/boost-lib/boost/utility/swap.hpp

  • Committer: Bazaar Package Importer
  • Author(s): Alessio Treglia
  • Date: 2010-11-04 11:46:25 UTC
  • mto: This revision was merged to the branch mainline in revision 8.
  • Revision ID: james.westby@ubuntu.com-20101104114625-8xfdhvhpsm51i0nu
Tags: upstream-0.8.0
ImportĀ upstreamĀ versionĀ 0.8.0

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
// Copyright (C) 2007, 2008 Steven Watanabe, Joseph Gauterin, Niels Dekker
 
2
//
 
3
// Distributed under the Boost Software License, Version 1.0. (See
 
4
// accompanying file LICENSE_1_0.txt or copy at
 
5
// http://www.boost.org/LICENSE_1_0.txt)
 
6
// For more information, see http://www.boost.org
 
7
 
 
8
 
 
9
#ifndef BOOST_UTILITY_SWAP_HPP
 
10
#define BOOST_UTILITY_SWAP_HPP
 
11
 
 
12
// Note: the implementation of this utility contains various workarounds:
 
13
// - swap_impl is put outside the boost namespace, to avoid infinite
 
14
// recursion (causing stack overflow) when swapping objects of a primitive
 
15
// type.
 
16
// - swap_impl has a using-directive, rather than a using-declaration,
 
17
// because some compilers (including MSVC 7.1, Borland 5.9.3, and
 
18
// Intel 8.1) don't do argument-dependent lookup when it has a
 
19
// using-declaration instead.
 
20
// - boost::swap has two template arguments, instead of one, to
 
21
// avoid ambiguity when swapping objects of a Boost type that does
 
22
// not have its own boost::swap overload.
 
23
 
 
24
#include <algorithm> //for std::swap
 
25
#include <cstddef> //for std::size_t
 
26
 
 
27
namespace boost_swap_impl
 
28
{
 
29
  template<class T>
 
30
  void swap_impl(T& left, T& right)
 
31
  {
 
32
    using namespace std;//use std::swap if argument dependent lookup fails
 
33
    swap(left,right);
 
34
  }
 
35
 
 
36
  template<class T, std::size_t N>
 
37
  void swap_impl(T (& left)[N], T (& right)[N])
 
38
  {
 
39
    for (std::size_t i = 0; i < N; ++i)
 
40
    {
 
41
      ::boost_swap_impl::swap_impl(left[i], right[i]);
 
42
    }
 
43
  }
 
44
}
 
45
 
 
46
namespace boost
 
47
{
 
48
  template<class T1, class T2>
 
49
  void swap(T1& left, T2& right)
 
50
  {
 
51
    ::boost_swap_impl::swap_impl(left, right);
 
52
  }
 
53
}
 
54
 
 
55
#endif