Mercurial > hg > vamp-build-and-test
comparison DEPENDENCIES/generic/include/boost/utility/swap.hpp @ 16:2665513ce2d3
Add boost headers
author | Chris Cannam |
---|---|
date | Tue, 05 Aug 2014 11:11:38 +0100 |
parents | |
children | c530137014c0 |
comparison
equal
deleted
inserted
replaced
15:663ca0da4350 | 16:2665513ce2d3 |
---|---|
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 |