~ubuntu-branches/ubuntu/wily/davix/wily

« back to all changes in this revision

Viewing changes to deps/boost_intern/boost/utility/swap.hpp

  • Committer: Package Import Robot
  • Author(s): Mattias Ellert
  • Date: 2015-07-31 13:17:55 UTC
  • mfrom: (5.1.3 sid)
  • Revision ID: package-import@ubuntu.com-20150731131755-mizprbmn7ogv33te
Tags: 0.4.1-1
* Update to version 0.4.1
* Implement Multi-Arch support

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