@@ -239,97 +239,6 @@ static inline auto reverse_range(unsigned start, unsigned end) ->
239
239
return reversed (range (start+1 , end+1 ));
240
240
}
241
241
242
- // / A random access range that provides iterators that can be used to iterate
243
- // / over the (element, index) pairs of a collection.
244
- template <typename IterTy> class EnumeratorRange {
245
- public:
246
- using IterTraitsTy = typename std::iterator_traits<IterTy>;
247
- static_assert (std::is_same<typename IterTraitsTy::iterator_category,
248
- std::random_access_iterator_tag>::value,
249
- " Expected a random access iterator" );
250
-
251
- private:
252
- IterTy Begin;
253
- IterTy End;
254
-
255
- public:
256
- EnumeratorRange (IterTy begin, IterTy end) : Begin(begin), End(end) {}
257
-
258
- class iterator {
259
- friend class EnumeratorRange ;
260
- IterTy Begin;
261
- IterTy Iter;
262
-
263
- iterator (IterTy begin, IterTy iter) : Begin(begin), Iter(iter) {}
264
-
265
- public:
266
- using value_type =
267
- std::pair<typename std::iterator_traits<IterTy>::value_type, int >;
268
- using reference =
269
- std::pair<typename std::iterator_traits<IterTy>::value_type, int >;
270
- using pointer = void ;
271
- using iterator_category = std::random_access_iterator_tag;
272
- using difference_type = int ;
273
-
274
- value_type operator *() const { return {*Iter, std::distance (Begin, Iter)}; }
275
- iterator &operator ++() {
276
- Iter++;
277
- return *this ;
278
- }
279
- iterator operator ++(int ) { return iterator (Begin, Iter++); }
280
- iterator &operator --() {
281
- Iter--;
282
- return *this ;
283
- }
284
- iterator operator --(int ) { return iterator (Begin, Iter--); }
285
- bool operator ==(iterator rhs) { return Iter == rhs.Iter ; }
286
- bool operator !=(iterator rhs) { return !(*this == rhs); }
287
-
288
- iterator &operator +=(difference_type i) {
289
- std::advance (Iter, i);
290
- return *this ;
291
- }
292
- iterator operator +(difference_type i) const {
293
- auto IterCopy = Iter;
294
- std::advance (IterCopy, i);
295
- return iterator (Begin, IterCopy);
296
- }
297
- friend iterator operator +(difference_type i, iterator base) {
298
- std::advance (base.Iter , i);
299
- return base;
300
- }
301
- iterator &operator -=(difference_type i) {
302
- *this += -i;
303
- return *this ;
304
- }
305
- iterator operator -(difference_type i) const {
306
- auto NewIter = *this ;
307
- return NewIter -= i;
308
- }
309
- difference_type operator -(iterator rhs) const {
310
- return difference_type (std::distance (Iter, rhs.Iter ));
311
- }
312
- };
313
-
314
- iterator begin () const { return iterator (Begin, Begin); }
315
- iterator end () const { return iterator (Begin, End); }
316
-
317
- using reverse_iterator = std::reverse_iterator<iterator>;
318
- reverse_iterator rbegin () const { return reverse_iterator (end ()); }
319
- reverse_iterator rend () const { return reverse_iterator (begin ()); }
320
- };
321
-
322
- // / enumerate - Given a type that's subscriptable with integers, return an
323
- // / IntEnumerateRange consisting of the valid subscripts.
324
- template <class T >
325
- EnumeratorRange<typename T::iterator> enumerate(T &collection) {
326
- return EnumeratorRange<typename T::iterator>(collection.begin (),
327
- collection.end ());
328
- }
329
- template <class T > EnumeratorRange<T> enumerate(T Begin, T End) {
330
- return EnumeratorRange<T>(Begin, End);
331
- }
332
-
333
242
} // end namespace swift
334
243
335
244
#endif // SWIFT_BASIC_RANGE_H
0 commit comments