// This provides a very simple, boring adaptor for a begin and end iterator // into a range type. This should be used to build range views that work well // with range based for loops and range based constructors. // // Note that code here follows more standards-based coding conventions as it // is mirroring proposed interfaces for standardization. // // Converted from chandlerc@'s code to Google style by joshl@. #ifndef TENSORFLOW_LIB_GTL_ITERATOR_RANGE_H_ #define TENSORFLOW_LIB_GTL_ITERATOR_RANGE_H_ #include namespace tensorflow { namespace gtl { // A range adaptor for a pair of iterators. // // This just wraps two iterators into a range-compatible interface. Nothing // fancy at all. template class iterator_range { public: iterator_range() : begin_iterator_(), end_iterator_() {} iterator_range(IteratorT begin_iterator, IteratorT end_iterator) : begin_iterator_(std::move(begin_iterator)), end_iterator_(std::move(end_iterator)) {} IteratorT begin() const { return begin_iterator_; } IteratorT end() const { return end_iterator_; } private: IteratorT begin_iterator_, end_iterator_; }; // 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)); } } // namespace gtl } // namespace tensorflow #endif // TENSORFLOW_LIB_GTL_ITERATOR_RANGE_H_