30 #ifndef _GLIBCXX_PREDEFINED_OPS_H 31 #define _GLIBCXX_PREDEFINED_OPS_H 1 37 struct _Iter_less_iter
39 template<
typename _Iterator1,
typename _Iterator2>
42 operator()(_Iterator1 __it1, _Iterator2 __it2)
const 43 {
return *__it1 < *__it2; }
47 inline _Iter_less_iter
49 {
return _Iter_less_iter(); }
53 template<
typename _Iterator,
typename _Value>
55 operator()(_Iterator __it, _Value& __val)
const 56 {
return *__it < __val; }
61 {
return _Iter_less_val(); }
64 __iter_comp_val(_Iter_less_iter)
65 {
return _Iter_less_val(); }
69 template<
typename _Value,
typename _Iterator>
71 operator()(_Value& __val, _Iterator __it)
const 72 {
return __val < *__it; }
77 {
return _Val_less_iter(); }
80 __val_comp_iter(_Iter_less_iter)
81 {
return _Val_less_iter(); }
83 struct _Iter_equal_to_iter
85 template<
typename _Iterator1,
typename _Iterator2>
87 operator()(_Iterator1 __it1, _Iterator2 __it2)
const 88 {
return *__it1 == *__it2; }
91 inline _Iter_equal_to_iter
92 __iter_equal_to_iter()
93 {
return _Iter_equal_to_iter(); }
95 struct _Iter_equal_to_val
97 template<
typename _Iterator,
typename _Value>
99 operator()(_Iterator __it, _Value& __val)
const 100 {
return *__it == __val; }
103 inline _Iter_equal_to_val
104 __iter_equal_to_val()
105 {
return _Iter_equal_to_val(); }
107 inline _Iter_equal_to_val
108 __iter_comp_val(_Iter_equal_to_iter)
109 {
return _Iter_equal_to_val(); }
111 template<
typename _Compare>
112 struct _Iter_comp_iter
116 explicit _GLIBCXX14_CONSTEXPR
117 _Iter_comp_iter(_Compare __comp)
121 template<
typename _Iterator1,
typename _Iterator2>
124 operator()(_Iterator1 __it1, _Iterator2 __it2)
125 {
return bool(_M_comp(*__it1, *__it2)); }
128 template<
typename _Compare>
130 inline _Iter_comp_iter<_Compare>
131 __iter_comp_iter(_Compare __comp)
132 {
return _Iter_comp_iter<_Compare>(__comp); }
134 template<
typename _Compare>
135 struct _Iter_comp_val
140 _Iter_comp_val(_Compare __comp)
144 template<
typename _Iterator,
typename _Value>
146 operator()(_Iterator __it, _Value& __val)
147 {
return bool(_M_comp(*__it, __val)); }
150 template<
typename _Compare>
151 inline _Iter_comp_val<_Compare>
152 __iter_comp_val(_Compare __comp)
153 {
return _Iter_comp_val<_Compare>(__comp); }
155 template<
typename _Compare>
156 inline _Iter_comp_val<_Compare>
157 __iter_comp_val(_Iter_comp_iter<_Compare> __comp)
158 {
return _Iter_comp_val<_Compare>(__comp._M_comp); }
160 template<
typename _Compare>
161 struct _Val_comp_iter
166 _Val_comp_iter(_Compare __comp)
170 template<
typename _Value,
typename _Iterator>
172 operator()(_Value& __val, _Iterator __it)
173 {
return bool(_M_comp(__val, *__it)); }
176 template<
typename _Compare>
177 inline _Val_comp_iter<_Compare>
178 __val_comp_iter(_Compare __comp)
179 {
return _Val_comp_iter<_Compare>(__comp); }
181 template<
typename _Compare>
182 inline _Val_comp_iter<_Compare>
183 __val_comp_iter(_Iter_comp_iter<_Compare> __comp)
184 {
return _Val_comp_iter<_Compare>(__comp._M_comp); }
186 template<
typename _Value>
187 struct _Iter_equals_val
192 _Iter_equals_val(_Value& __value)
196 template<
typename _Iterator>
198 operator()(_Iterator __it)
199 {
return *__it == _M_value; }
202 template<
typename _Value>
203 inline _Iter_equals_val<_Value>
204 __iter_equals_val(_Value& __val)
205 {
return _Iter_equals_val<_Value>(__val); }
207 template<
typename _Iterator1>
208 struct _Iter_equals_iter
213 _Iter_equals_iter(_Iterator1 __it1)
217 template<
typename _Iterator2>
219 operator()(_Iterator2 __it2)
220 {
return *__it2 == *_M_it1; }
223 template<
typename _Iterator>
224 inline _Iter_equals_iter<_Iterator>
225 __iter_comp_iter(_Iter_equal_to_iter, _Iterator __it)
226 {
return _Iter_equals_iter<_Iterator>(__it); }
228 template<
typename _Predicate>
234 _Iter_pred(_Predicate __pred)
238 template<
typename _Iterator>
240 operator()(_Iterator __it)
241 {
return bool(_M_pred(*__it)); }
244 template<
typename _Predicate>
245 inline _Iter_pred<_Predicate>
246 __pred_iter(_Predicate __pred)
247 {
return _Iter_pred<_Predicate>(__pred); }
249 template<
typename _Compare,
typename _Value>
250 struct _Iter_comp_to_val
255 _Iter_comp_to_val(_Compare __comp, _Value& __value)
256 : _M_comp(__comp), _M_value(__value)
259 template<
typename _Iterator>
261 operator()(_Iterator __it)
262 {
return bool(_M_comp(*__it, _M_value)); }
265 template<
typename _Compare,
typename _Value>
266 _Iter_comp_to_val<_Compare, _Value>
267 __iter_comp_val(_Compare __comp, _Value &__val)
268 {
return _Iter_comp_to_val<_Compare, _Value>(__comp, __val); }
270 template<
typename _Compare,
typename _Iterator1>
271 struct _Iter_comp_to_iter
276 _Iter_comp_to_iter(_Compare __comp, _Iterator1 __it1)
277 : _M_comp(__comp), _M_it1(__it1)
280 template<
typename _Iterator2>
282 operator()(_Iterator2 __it2)
283 {
return bool(_M_comp(*__it2, *_M_it1)); }
286 template<
typename _Compare,
typename _Iterator>
287 inline _Iter_comp_to_iter<_Compare, _Iterator>
288 __iter_comp_iter(_Iter_comp_iter<_Compare> __comp, _Iterator __it)
289 {
return _Iter_comp_to_iter<_Compare, _Iterator>(__comp._M_comp, __it); }
291 template<
typename _Predicate>
297 _Iter_negate(_Predicate __pred)
301 template<
typename _Iterator>
303 operator()(_Iterator __it)
304 {
return !bool(_M_pred(*__it)); }
307 template<
typename _Predicate>
308 inline _Iter_negate<_Predicate>
309 __negate(_Iter_pred<_Predicate> __pred)
310 {
return _Iter_negate<_Predicate>(__pred._M_pred); }
GNU extensions for public use.