1 /* Copyright 2003-2015 Joaquin M Lopez Munoz.
2  * Distributed under the Boost Software License, Version 1.0.
3  * (See accompanying file LICENSE_1_0.txt or copy at
4  * http://www.boost.org/LICENSE_1_0.txt)
5  *
6  * See http://www.boost.org/libs/multi_index for library home page.
7  */
8 
9 #ifndef BOOST_MULTI_INDEX_DETAIL_VALUE_COMPARE_HPP
10 #define BOOST_MULTI_INDEX_DETAIL_VALUE_COMPARE_HPP
11 
12 #if defined(_MSC_VER)
13 #pragma once
14 #endif
15 
16 #include <boost/config.hpp> /* keep it first to prevent nasty warns in MSVC */
17 #include <boost/call_traits.hpp>
18 
19 namespace boost{
20 
21 namespace multi_index{
22 
23 namespace detail{
24 
25 template<typename Value,typename KeyFromValue,typename Compare>
26 struct value_comparison
27 {
28   typedef Value first_argument_type;
29   typedef Value second_argument_type;
30   typedef bool  result_type;
31 
value_comparisonboost::multi_index::detail::value_comparison32   value_comparison(
33     const KeyFromValue& key_=KeyFromValue(),const Compare& comp_=Compare()):
34     key(key_),comp(comp_)
35   {
36   }
37 
operator ()boost::multi_index::detail::value_comparison38   bool operator()(
39     typename call_traits<Value>::param_type x,
40     typename call_traits<Value>::param_type y)const
41   {
42     return comp(key(x),key(y));
43   }
44 
45 private:
46   KeyFromValue key;
47   Compare      comp;
48 };
49 
50 } /* namespace multi_index::detail */
51 
52 } /* namespace multi_index */
53 
54 } /* namespace boost */
55 
56 #endif
57