30 #ifndef _GLIBCXX_PREDEFINED_OPS_H 
   31 #define _GLIBCXX_PREDEFINED_OPS_H   1 
   37   struct _Iter_less_iter
 
   39     template<
typename _Iterator1, 
typename _Iterator2>
 
   41       operator()(_Iterator1 __it1, _Iterator2 __it2)
 const 
   42       { 
return *__it1 < *__it2; }
 
   45   inline _Iter_less_iter
 
   47   { 
return _Iter_less_iter(); }
 
   51     template<
typename _Iterator, 
typename _Value>
 
   53       operator()(_Iterator __it, _Value& __val)
 const 
   54       { 
return *__it < __val; }
 
   59   { 
return _Iter_less_val(); }
 
   62   __iter_comp_val(_Iter_less_iter)
 
   63   { 
return _Iter_less_val(); }
 
   67     template<
typename _Value, 
typename _Iterator>
 
   69       operator()(_Value& __val, _Iterator __it)
 const 
   70       { 
return __val < *__it; }
 
   75   { 
return _Val_less_iter(); }
 
   78   __val_comp_iter(_Iter_less_iter)
 
   79   { 
return _Val_less_iter(); }
 
   81   struct _Iter_equal_to_iter
 
   83     template<
typename _Iterator1, 
typename _Iterator2>
 
   85       operator()(_Iterator1 __it1, _Iterator2 __it2)
 const 
   86       { 
return *__it1 == *__it2; }
 
   89   inline _Iter_equal_to_iter
 
   90   __iter_equal_to_iter()
 
   91   { 
return _Iter_equal_to_iter(); }
 
   93   struct _Iter_equal_to_val
 
   95     template<
typename _Iterator, 
typename _Value>
 
   97       operator()(_Iterator __it, _Value& __val)
 const 
   98       { 
return *__it == __val; }
 
  101   inline _Iter_equal_to_val
 
  102   __iter_equal_to_val()
 
  103   { 
return _Iter_equal_to_val(); }
 
  105   inline _Iter_equal_to_val
 
  106   __iter_comp_val(_Iter_equal_to_iter)
 
  107   { 
return _Iter_equal_to_val(); }
 
  109   template<
typename _Compare>
 
  110     struct _Iter_comp_iter
 
  114       _Iter_comp_iter(_Compare __comp)
 
  118       template<
typename _Iterator1, 
typename _Iterator2>
 
  120         operator()(_Iterator1 __it1, _Iterator2 __it2)
 
  121         { 
return bool(_M_comp(*__it1, *__it2)); }
 
  124   template<
typename _Compare>
 
  125     inline _Iter_comp_iter<_Compare>
 
  126     __iter_comp_iter(_Compare __comp)
 
  127     { 
return _Iter_comp_iter<_Compare>(__comp); }
 
  129   template<
typename _Compare>
 
  130     struct _Iter_comp_val
 
  134       _Iter_comp_val(_Compare __comp)
 
  138       template<
typename _Iterator, 
typename _Value>
 
  140     operator()(_Iterator __it, _Value& __val)
 
  141     { 
return bool(_M_comp(*__it, __val)); }
 
  144   template<
typename _Compare>
 
  145    inline _Iter_comp_val<_Compare>
 
  146     __iter_comp_val(_Compare __comp)
 
  147     { 
return _Iter_comp_val<_Compare>(__comp); }
 
  149   template<
typename _Compare>
 
  150     inline _Iter_comp_val<_Compare>
 
  151     __iter_comp_val(_Iter_comp_iter<_Compare> __comp)
 
  152     { 
return _Iter_comp_val<_Compare>(__comp._M_comp); }
 
  154   template<
typename _Compare>
 
  155     struct _Val_comp_iter
 
  159       _Val_comp_iter(_Compare __comp)
 
  163       template<
typename _Value, 
typename _Iterator>
 
  165     operator()(_Value& __val, _Iterator __it)
 
  166     { 
return bool(_M_comp(__val, *__it)); }
 
  169   template<
typename _Compare>
 
  170     inline _Val_comp_iter<_Compare>
 
  171     __val_comp_iter(_Compare __comp)
 
  172     { 
return _Val_comp_iter<_Compare>(__comp); }
 
  174   template<
typename _Compare>
 
  175     inline _Val_comp_iter<_Compare>
 
  176     __val_comp_iter(_Iter_comp_iter<_Compare> __comp)
 
  177     { 
return _Val_comp_iter<_Compare>(__comp._M_comp); }
 
  179   template<
typename _Value>
 
  180     struct _Iter_equals_val
 
  184       _Iter_equals_val(_Value& __value)
 
  188       template<
typename _Iterator>
 
  190     operator()(_Iterator __it)
 
  191     { 
return *__it == _M_value; }
 
  194   template<
typename _Value>
 
  195     inline _Iter_equals_val<_Value>
 
  196     __iter_equals_val(_Value& __val)
 
  197     { 
return _Iter_equals_val<_Value>(__val); }
 
  199   template<
typename _Iterator1>
 
  200     struct _Iter_equals_iter
 
  202       typename std::iterator_traits<_Iterator1>::reference _M_ref;
 
  204       _Iter_equals_iter(_Iterator1 __it1)
 
  208       template<
typename _Iterator2>
 
  210     operator()(_Iterator2 __it2)
 
  211     { 
return *__it2 == _M_ref; }
 
  214   template<
typename _Iterator>
 
  215     inline _Iter_equals_iter<_Iterator>
 
  216     __iter_comp_iter(_Iter_equal_to_iter, _Iterator __it)
 
  217     { 
return _Iter_equals_iter<_Iterator>(__it); }
 
  219   template<
typename _Predicate>
 
  224       _Iter_pred(_Predicate __pred)
 
  228       template<
typename _Iterator>
 
  230     operator()(_Iterator __it)
 
  231     { 
return bool(_M_pred(*__it)); }
 
  234   template<
typename _Predicate>
 
  235     inline _Iter_pred<_Predicate>
 
  236     __pred_iter(_Predicate __pred)
 
  237     { 
return _Iter_pred<_Predicate>(__pred); }
 
  239   template<
typename _Compare, 
typename _Value>
 
  240     struct _Iter_comp_to_val
 
  245       _Iter_comp_to_val(_Compare __comp, _Value& __value)
 
  246     : _M_comp(__comp), _M_value(__value)
 
  249       template<
typename _Iterator>
 
  251     operator()(_Iterator __it)
 
  252     { 
return bool(_M_comp(*__it, _M_value)); }
 
  255   template<
typename _Compare, 
typename _Value>
 
  256     _Iter_comp_to_val<_Compare, _Value>
 
  257     __iter_comp_val(_Compare __comp, _Value &__val)
 
  258     { 
return _Iter_comp_to_val<_Compare, _Value>(__comp, __val); }
 
  260   template<
typename _Compare, 
typename _Iterator1>
 
  261     struct _Iter_comp_to_iter
 
  264       typename std::iterator_traits<_Iterator1>::reference _M_ref;
 
  266       _Iter_comp_to_iter(_Compare __comp, _Iterator1 __it1)
 
  267     : _M_comp(__comp), _M_ref(*__it1)
 
  270       template<
typename _Iterator2>
 
  272     operator()(_Iterator2 __it2)
 
  273     { 
return bool(_M_comp(*__it2, _M_ref)); }
 
  276   template<
typename _Compare, 
typename _Iterator>
 
  277     inline _Iter_comp_to_iter<_Compare, _Iterator>
 
  278     __iter_comp_iter(_Iter_comp_iter<_Compare> __comp, _Iterator __it)
 
  279     { 
return _Iter_comp_to_iter<_Compare, _Iterator>(__comp._M_comp, __it); }
 
  281   template<
typename _Predicate>
 
  286       _Iter_negate(_Predicate __pred)
 
  290       template<
typename _Iterator>
 
  292     operator()(_Iterator __it)
 
  293     { 
return !bool(_M_pred(*__it)); }
 
  296   template<
typename _Predicate>
 
  297     inline _Iter_negate<_Predicate>
 
  298     __negate(_Iter_pred<_Predicate> __pred)
 
  299     { 
return _Iter_negate<_Predicate>(__pred._M_pred); }
 
GNU extensions for public use.