Index: include/llvm/ADT/iterator_range.h =================================================================== --- include/llvm/ADT/iterator_range.h +++ include/llvm/ADT/iterator_range.h @@ -63,6 +63,29 @@ iterator_range()))> drop_begin(T &&t, int n) { return make_range(std::next(begin(t), n), end(t)); } + +/// \brief Convenience function for iterating over stl-like containers. +/// +/// This provides a bit of syntactic sugar to make using ranges in loops a bit +/// easier. +template iterator_range make_range(T &C) { + return iterator_range(C.begin(), C.end()); +} + +template +iterator_range reverse_range(T &C) { + return iterator_range(C.rbegin(), C.rend()); +} + +template +iterator_range make_range(const T &C) { + return iterator_range(C.begin(), C.end()); +} + +template +iterator_range reverse_range(const T &C) { + return iterator_range(C.rbegin(), C.rend()); +} } #endif