00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029 #ifndef __ADJACENT_PREDICATE__
00030 #define __ADJACENT_PREDICATE__
00031
00032 #include <functional>
00033 #include <utility>
00034 #include "DisplayPair.hxx"
00035
00036 template < typename T >
00037 struct AdjacentPredicate : public std::binary_function < T, T, bool >
00038 {
00039 T _value;
00040 AdjacentPredicate(const T& value):_value(value){}
00041 bool operator()(const T &v1, const T& v2) const {
00042 return (v1 <= _value ) && (_value < v2) ;
00043 }
00044 };
00045
00046
00047 template <typename T1, typename T2, typename T3>
00048 struct AdjacentPredicate< std::pair<const std::pair<T1,T2>, T3 > > :
00049 public std::binary_function < std::pair<const std::pair<T1,T2>, T3 >,
00050 std::pair<const std::pair<T1,T2>, T3 >, bool >
00051 {
00052 std::pair<T1,T2> _value;
00053 AdjacentPredicate(const std::pair<T1,T2> & value):_value(value){
00054 std::cout << "1-Initializing with value " << _value << std::endl;
00055 }
00056 bool operator()( const std::pair<const std::pair<T1,T2>, T3 > & v1,
00057 const std::pair<const std::pair<T1,T2>, T3 > v2) const {
00058 std::cout << "1-> :" << v1 << "," << v2 << " " << std::endl;
00059 return (v1.first <= _value ) && (_value < v2.first) ;
00060 }
00061 };
00062
00063 template <typename T1, typename T2>
00064 struct AdjacentPredicate< std::pair<T1,T2> > : public std::binary_function < std::pair<T1,T2>, std::pair<T1,T2>, bool >
00065 {
00066 T1 _value;
00067 AdjacentPredicate(const T1 & value):_value(value){
00068 std::cout << "2-Initializing with value " << _value << std::endl;
00069 }
00070 bool operator()( const std::pair<T1,T2> & v1, const std::pair<T1,T2>& v2) const {
00071 std::cout << "2-> :" << &(v1.first) << "," << &(v2.first) << " " << std::endl;
00072 return (v1.first <= _value ) && (_value < v2.first) ;
00073 }
00074 };
00075
00076 #endif