epoc32/include/stdapis/boost/utility/compare_pointees.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 // Copyright (C) 2003, Fernando Luis Cacciola Carballal.
     2 //
     3 // Use, modification, and distribution is subject to the Boost Software
     4 // License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
     5 // http://www.boost.org/LICENSE_1_0.txt)
     6 //
     7 // See http://www.boost.org/lib/optional for documentation.
     8 //
     9 // You are welcome to contact the author at:
    10 //  fernando_cacciola@hotmail.com
    11 //
    12 #ifndef BOOST_UTILITY_COMPARE_POINTEES_25AGO2003_HPP
    13 #define BOOST_UTILITY_COMPARE_POINTEES_25AGO2003_HPP
    14 
    15 #include<functional>
    16 
    17 namespace boost {
    18 
    19 // template<class OP> bool equal_pointees(OP const& x, OP const& y);
    20 // template<class OP> struct equal_pointees_t;
    21 //
    22 // Being OP a model of OptionalPointee (either a pointer or an optional):
    23 //
    24 // If both x and y have valid pointees, returns the result of (*x == *y)
    25 // If only one has a valid pointee, returns false.
    26 // If none have valid pointees, returns true.
    27 // No-throw
    28 template<class OptionalPointee>
    29 inline
    30 bool equal_pointees ( OptionalPointee const& x, OptionalPointee const& y )
    31 {
    32   return (!x) != (!y) ? false : ( !x ? true : (*x) == (*y) ) ;
    33 }
    34 
    35 template<class OptionalPointee>
    36 struct equal_pointees_t : std::binary_function<OptionalPointee,OptionalPointee,bool>
    37 {
    38   bool operator() ( OptionalPointee const& x, OptionalPointee const& y ) const
    39     { return equal_pointees(x,y) ; }
    40 } ;
    41 
    42 // template<class OP> bool less_pointees(OP const& x, OP const& y);
    43 // template<class OP> struct less_pointees_t;
    44 //
    45 // Being OP a model of OptionalPointee (either a pointer or an optional):
    46 //
    47 // If y has not a valid pointee, returns false.
    48 // ElseIf x has not a valid pointee, returns true.
    49 // ElseIf both x and y have valid pointees, returns the result of (*x < *y)
    50 // No-throw
    51 template<class OptionalPointee>
    52 inline
    53 bool less_pointees ( OptionalPointee const& x, OptionalPointee const& y )
    54 {
    55   return !y ? false : ( !x ? true : (*x) < (*y) ) ;
    56 }
    57 
    58 template<class OptionalPointee>
    59 struct less_pointees_t : std::binary_function<OptionalPointee,OptionalPointee,bool>
    60 {
    61   bool operator() ( OptionalPointee const& x, OptionalPointee const& y ) const
    62     { return less_pointees(x,y) ; }
    63 } ;
    64 
    65 } // namespace boost
    66 
    67 #endif
    68