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)
118 : _M_comp(_GLIBCXX_MOVE(__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>(_GLIBCXX_MOVE(__comp)); }
134 template<
typename _Compare>
135 struct _Iter_comp_val
140 _Iter_comp_val(_Compare __comp)
141 : _M_comp(_GLIBCXX_MOVE(__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>(_GLIBCXX_MOVE(__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>(_GLIBCXX_MOVE(__comp._M_comp)); }
160 template<
typename _Compare>
161 struct _Val_comp_iter
166 _Val_comp_iter(_Compare __comp)
167 : _M_comp(_GLIBCXX_MOVE(__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>(_GLIBCXX_MOVE(__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>(_GLIBCXX_MOVE(__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
210 typename std::iterator_traits<_Iterator1>::reference _M_ref;
213 _Iter_equals_iter(_Iterator1 __it1)
217 template<
typename _Iterator2>
219 operator()(_Iterator2 __it2)
220 {
return *__it2 == _M_ref; }
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)
235 : _M_pred(_GLIBCXX_MOVE(__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>(_GLIBCXX_MOVE(__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(_GLIBCXX_MOVE(__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)
269 return _Iter_comp_to_val<_Compare, _Value>(_GLIBCXX_MOVE(__comp), __val);
272 template<
typename _Compare,
typename _Iterator1>
273 struct _Iter_comp_to_iter
276 typename std::iterator_traits<_Iterator1>::reference _M_ref;
278 _Iter_comp_to_iter(_Compare __comp, _Iterator1 __it1)
279 : _M_comp(_GLIBCXX_MOVE(__comp)), _M_ref(*__it1)
282 template<
typename _Iterator2>
284 operator()(_Iterator2 __it2)
285 {
return bool(_M_comp(*__it2, _M_ref)); }
288 template<
typename _Compare,
typename _Iterator>
289 inline _Iter_comp_to_iter<_Compare, _Iterator>
290 __iter_comp_iter(_Iter_comp_iter<_Compare> __comp, _Iterator __it)
292 return _Iter_comp_to_iter<_Compare, _Iterator>(
293 _GLIBCXX_MOVE(__comp._M_comp), __it);
296 template<
typename _Predicate>
302 _Iter_negate(_Predicate __pred)
303 : _M_pred(_GLIBCXX_MOVE(__pred))
306 template<
typename _Iterator>
308 operator()(_Iterator __it)
309 {
return !bool(_M_pred(*__it)); }
312 template<
typename _Predicate>
313 inline _Iter_negate<_Predicate>
314 __negate(_Iter_pred<_Predicate> __pred)
315 {
return _Iter_negate<_Predicate>(_GLIBCXX_MOVE(__pred._M_pred)); }
GNU extensions for public use.