epoc32/include/stdapis/boost/pending/indirect_cmp.hpp
author William Roberts <williamr@symbian.org>
Wed, 31 Mar 2010 12:33:34 +0100
branchSymbian3
changeset 4 837f303aceeb
permissions -rw-r--r--
Current Symbian^3 public API header files (from PDK 3.0.h)
This is the epoc32/include tree with the "platform" subtrees removed, and
all but a selected few mbg and rsg files removed.
     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.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 T 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       T du = get(d, u), dv = get(d, v);
    44       return cmp(du, dv);
    45     }
    46   protected:
    47     ReadablePropertyMap d;
    48     Compare cmp;
    49   };
    50 
    51   template <typename Compare, typename ReadablePropertyMap>
    52   indirect_cmp<ReadablePropertyMap, Compare>
    53   make_indirect_cmp(const Compare& cmp, ReadablePropertyMap pmap) {
    54     indirect_cmp<ReadablePropertyMap, Compare> p(pmap, cmp);
    55     return p;
    56   }
    57 
    58   template <class ReadablePropertyMap>
    59   class indirect_pmap {
    60   public:
    61     typedef typename boost::property_traits<ReadablePropertyMap>::value_type T;
    62     typedef typename boost::property_traits<ReadablePropertyMap>::key_type K;
    63     typedef K argument_type;
    64     typedef T result_type;
    65     inline indirect_pmap(const ReadablePropertyMap& df)
    66       : d(df) { }
    67 
    68     inline bool operator()(const K& u) const {
    69       return get(d, u);
    70     }
    71   protected:
    72     ReadablePropertyMap d;
    73   };
    74 
    75   template <typename ReadablePropertyMap>
    76   indirect_pmap<ReadablePropertyMap>
    77   make_indirect_pmap(ReadablePropertyMap pmap) {
    78     indirect_pmap<ReadablePropertyMap> f(pmap);
    79     return f;
    80   }
    81 
    82 
    83 } // namespace boost
    84 
    85 
    86 #endif // GGCL_INDIRECT_CMP_HPP