X-Git-Url: http://demsky.eecs.uci.edu/git/?a=blobdiff_plain;f=include%2Fllvm%2FADT%2Fiterator_range.h;h=523a86f02e083d3cdbfc31a96f2052bf40672145;hb=2086b2e76ada5779e355dd70189cd9b7939e2fa9;hp=b8ee75a8d4d5484eccf95e78da84a9801a47b5e0;hpb=29b1962c422fb0b68ccd360f7188c3becfcc5d0b;p=oota-llvm.git diff --git a/include/llvm/ADT/iterator_range.h b/include/llvm/ADT/iterator_range.h index b8ee75a8d4d..523a86f02e0 100644 --- a/include/llvm/ADT/iterator_range.h +++ b/include/llvm/ADT/iterator_range.h @@ -19,17 +19,10 @@ #ifndef LLVM_ADT_ITERATOR_RANGE_H #define LLVM_ADT_ITERATOR_RANGE_H -#include -#include #include namespace llvm { -template -struct range_traits { - typedef typename Range::difference_type difference_type; -}; - /// \brief A range adaptor for a pair of iterators. /// /// This just wraps two iterators into a range-compatible interface. Nothing @@ -39,11 +32,6 @@ class iterator_range { IteratorT begin_iterator, end_iterator; public: - // FIXME: We should be using iterator_traits to determine the - // difference_type, but most of our iterators do not expose anything like it. - typedef int difference_type; - - iterator_range() {} iterator_range(IteratorT begin_iterator, IteratorT end_iterator) : begin_iterator(std::move(begin_iterator)), end_iterator(std::move(end_iterator)) {} @@ -52,18 +40,16 @@ public: IteratorT end() const { return end_iterator; } }; -/// \brief Determine the distance between the end() and begin() iterators of -/// a range. Analogous to std::distance(). -template -typename range_traits::difference_type distance(Range R) { - return std::distance(R.begin(), R.end()); +/// \brief Convenience function for iterating over sub-ranges. +/// +/// This provides a bit of syntactic sugar to make using sub-ranges +/// in for loops a bit easier. Analogous to std::make_pair(). +template iterator_range make_range(T x, T y) { + return iterator_range(std::move(x), std::move(y)); } -/// \brief Copies members of a range into the output iterator provided. -/// Analogous to std::copy. -template -OutputIterator copy(Range In, OutputIterator Result) { - return std::copy(In.begin(), In.end(), Result); +template iterator_range make_range(std::pair p) { + return iterator_range(std::move(p.first), std::move(p.second)); } }