Mercurial > hg > vamp-build-and-test
comparison DEPENDENCIES/generic/include/boost/pending/indirect_cmp.hpp @ 16:2665513ce2d3
Add boost headers
author | Chris Cannam |
---|---|
date | Tue, 05 Aug 2014 11:11:38 +0100 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
15:663ca0da4350 | 16:2665513ce2d3 |
---|---|
1 // | |
2 //======================================================================= | |
3 // Copyright 1997, 1998, 1999, 2000 University of Notre Dame. | |
4 // Authors: Andrew Lumsdaine, Lie-Quan Lee, Jeremy G. Siek | |
5 // | |
6 // Distributed under the Boost Software License, Version 1.0. (See | |
7 // accompanying file LICENSE_1_0.txt or copy at | |
8 // http://www.boost.org/LICENSE_1_0.txt) | |
9 //======================================================================= | |
10 // | |
11 | |
12 #ifndef BOOST_INDIRECT_CMP_HPP | |
13 #define BOOST_INDIRECT_CMP_HPP | |
14 | |
15 #include <functional> | |
16 #include <boost/config.hpp> | |
17 #include <boost/property_map/property_map.hpp> | |
18 | |
19 namespace boost { | |
20 | |
21 //: indirect_cmp | |
22 // | |
23 // could also do this with compose_f_gx_hx, and the member binder... | |
24 // | |
25 //!category: functors | |
26 //!component: type | |
27 //!tparam: ReadablePropertyMap - a model of ReadablePropertyMap | |
28 //!definition: functor.h | |
29 template <class ReadablePropertyMap, class Compare> | |
30 class indirect_cmp { | |
31 public: | |
32 typedef typename boost::property_traits<ReadablePropertyMap>::value_type T; | |
33 typedef typename boost::property_traits<ReadablePropertyMap>::key_type K; | |
34 typedef K first_argument_type; | |
35 typedef K second_argument_type; | |
36 typedef bool result_type; | |
37 inline indirect_cmp(const ReadablePropertyMap& df, const Compare& c = Compare()) | |
38 : d(df), cmp(c) { } | |
39 | |
40 template <class A, class B> | |
41 inline bool | |
42 operator()(const A& u, const B& v) const { | |
43 const T& du = get(d, u); | |
44 const T& dv = get(d, v); | |
45 return cmp(du, dv); | |
46 } | |
47 protected: | |
48 ReadablePropertyMap d; | |
49 Compare cmp; | |
50 }; | |
51 | |
52 template <typename Compare, typename ReadablePropertyMap> | |
53 indirect_cmp<ReadablePropertyMap, Compare> | |
54 make_indirect_cmp(const Compare& cmp, ReadablePropertyMap pmap) { | |
55 indirect_cmp<ReadablePropertyMap, Compare> p(pmap, cmp); | |
56 return p; | |
57 } | |
58 | |
59 template <class ReadablePropertyMap> | |
60 class indirect_pmap { | |
61 public: | |
62 typedef typename boost::property_traits<ReadablePropertyMap>::value_type T; | |
63 typedef typename boost::property_traits<ReadablePropertyMap>::key_type K; | |
64 typedef K argument_type; | |
65 typedef T result_type; | |
66 inline indirect_pmap(const ReadablePropertyMap& df) | |
67 : d(df) { } | |
68 | |
69 inline T operator()(const K& u) const { | |
70 return get(d, u); | |
71 } | |
72 protected: | |
73 ReadablePropertyMap d; | |
74 }; | |
75 | |
76 template <typename ReadablePropertyMap> | |
77 indirect_pmap<ReadablePropertyMap> | |
78 make_indirect_pmap(ReadablePropertyMap pmap) { | |
79 indirect_pmap<ReadablePropertyMap> f(pmap); | |
80 return f; | |
81 } | |
82 | |
83 | |
84 } // namespace boost | |
85 | |
86 | |
87 #endif // GGCL_INDIRECT_CMP_HPP |