1
2// Copyright 2006-2009 Daniel James.
3// Distributed under the Boost Software License, Version 1.0. (See accompanying
4// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
5
6#if !defined(BOOST_UNORDERED_TEST_HELPERS_HEADER)
7#define BOOST_UNORDERED_TEST_HELPERS_HEADER
8
9#include <iterator>
10
11namespace test {
12 template <class Container> struct get_key_impl
13 {
14 typedef typename Container::key_type key_type;
15
16 static key_type const& get_key(key_type const& x) { return x; }
17
18 template <class T>
19 static key_type const& get_key(std::pair<key_type, T> const& x, char = 0)
20 {
21 return x.first;
22 }
23
24 template <class T>
25 static key_type const& get_key(
26 std::pair<key_type const, T> const& x, unsigned char = 0)
27 {
28 return x.first;
29 }
30 };
31
32 template <class Container, class T>
33 inline typename Container::key_type const& get_key(T const& x)
34 {
35 return get_key_impl<Container>::get_key(x);
36 }
37
38 // test::next
39 //
40 // Increments an iterator by 1 or a given value.
41 // Like boost::next, but simpler.
42 // Mainly because boost::next uses an MPL file
43 // which causes warnings.
44
45 template <typename Iterator> Iterator next(Iterator it) { return ++it; }
46
47 template <typename Iterator, typename IntType>
48 Iterator next(Iterator it, IntType x)
49 {
50 std::advance(it,
51 static_cast<typename std::iterator_traits<Iterator>::difference_type>(x));
52 return it;
53 }
54}
55
56#endif
57

source code of boost/libs/unordered/test/helpers/helpers.hpp