1 // Copyright (C) 2003, Fernando Luis Cacciola Carballal.
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)
7 // See http://www.boost.org/lib/optional for documentation.
9 // You are welcome to contact the author at:
10 // fernando_cacciola@hotmail.com
12 #ifndef BOOST_UTILITY_COMPARE_POINTEES_25AGO2003_HPP
13 #define BOOST_UTILITY_COMPARE_POINTEES_25AGO2003_HPP
19 // template<class OP> bool equal_pointees(OP const& x, OP const& y);
20 // template<class OP> struct equal_pointees_t;
22 // Being OP a model of OptionalPointee (either a pointer or an optional):
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.
28 template<class OptionalPointee
>
30 bool equal_pointees ( OptionalPointee
const& x
, OptionalPointee
const& y
)
32 return (!x
) != (!y
) ? false : ( !x
? true : (*x
) == (*y
) ) ;
35 template<class OptionalPointee
>
36 struct equal_pointees_t
: std::binary_function
<OptionalPointee
,OptionalPointee
,bool>
38 bool operator() ( OptionalPointee
const& x
, OptionalPointee
const& y
) const
39 { return equal_pointees(x
,y
) ; }
42 // template<class OP> bool less_pointees(OP const& x, OP const& y);
43 // template<class OP> struct less_pointees_t;
45 // Being OP a model of OptionalPointee (either a pointer or an optional):
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)
51 template<class OptionalPointee
>
53 bool less_pointees ( OptionalPointee
const& x
, OptionalPointee
const& y
)
55 return !y
? false : ( !x
? true : (*x
) < (*y
) ) ;
58 template<class OptionalPointee
>
59 struct less_pointees_t
: std::binary_function
<OptionalPointee
,OptionalPointee
,bool>
61 bool operator() ( OptionalPointee
const& x
, OptionalPointee
const& y
) const
62 { return less_pointees(x
,y
) ; }