1 #ifndef color_generic_operation_compare_less_or_equal
2 #define color_generic_operation_compare_less_or_equal
3 
4 // using namespace  ::color::compare::less_or_equal
5 
6 #include "../../generic/model.hpp"
7 
8 
9 
10 
11 
12  namespace color
13   {
14    namespace compare
15     {
16 
17      template < typename category_name >
less_or_equal(::color::model<category_name> const & left,::color::model<category_name> const & right)18       bool less_or_equal
19        (
20          ::color::model< category_name >  const& left
21         ,::color::model< category_name >  const& right
22        )
23        {
24         return left.container() <= right.container();
25        }
26 
27      template< typename tag_name, typename category_name >
less_or_equal(::color::constant::base<tag_name> const & left,::color::model<category_name> const & right)28       bool less_or_equal
29        (
30          ::color::constant::base< tag_name >  const& left
31         ,::color::model< category_name >      const& right
32        )
33        {
34         return ::color::compare::less_or_equal< category_name >( ::color::model< category_name >( left ), right );
35        }
36 
37      template < typename category_name, typename tag_name >
less_or_equal(::color::model<category_name> const & left,::color::constant::base<tag_name> const & right)38       bool less_or_equal
39        (
40          ::color::model< category_name >      const& left
41         ,::color::constant::base< tag_name >  const& right
42        )
43        {
44         return ::color::compare::less_or_equal< category_name >( ::color::model< category_name >( left ), right );
45        }
46 
47      namespace  operators
48       {
49 
50        template< typename category_name >
51         inline
52         bool
operator <=(::color::model<category_name> const & left,::color::model<category_name> const & right)53         operator <=( ::color::model< category_name > const& left, ::color::model< category_name > const&  right )
54          {
55           return ::color::compare::less_or_equal( left, right );
56          }
57 
58        template< typename tag_name, typename category_name >
59         inline
60         bool
operator <=(::color::constant::base<tag_name> const & left,::color::model<category_name> const & right)61         operator <=( ::color::constant::base< tag_name > const& left, ::color::model< category_name > const&  right )
62          {
63           return ::color::compare::less_or_equal( left, right );
64          }
65 
66        template< typename category_name, typename tag_name >
67         inline
68         bool
operator <=(::color::model<category_name> const & left,::color::constant::base<tag_name> const & right)69         operator <=(::color::model< category_name > const& left, ::color::constant::base< tag_name > const&  right )
70          {
71           return ::color::compare::less_or_equal( left, right );
72          }
73 
74       }
75 
76      namespace functor
77       {
78 
79        template< typename category_name >
80         class less_or_equal
81          {
82           public:
83            typedef ::color::model< category_name > value_type;
operator ()(value_type const & left,value_type const & right) const84            bool operator ()( value_type const& left, value_type const& right )const
85             {
86              return ::color::compare::less_or_equal( left, right );
87             }
88          };
89 
90       }
91 
92     }
93  }
94 
95 #if !defined( COLOR_DO_NOT_SPECIALIZE_STD_COMPARISON )
96 
97  namespace std
98   {
99 
100     template< typename category_name >
101      struct less_equal< ::color::model< category_name >  >
102       {
103        private:
104          typedef ::color::model< category_name > value_type;
105        public:
operator ()std::less_equal106          bool operator ()( value_type const& left, value_type const& right )const
107           {
108            return ::color::compare::less_or_equal( left, right );
109           }
110       };
111 
112   }
113 
114 #endif
115 
116 #endif
117