14 #ifndef OR_TOOLS_MATH_OPT_STORAGE_RANGE_H_
15 #define OR_TOOLS_MATH_OPT_STORAGE_RANGE_H_
19 #include <type_traits>
28 template <
typename IteratorT>
33 using value_type =
typename std::iterator_traits<IteratorT>::value_type;
37 : begin_iterator_(std::move(begin_iterator)),
38 end_iterator_(std::move(end_iterator)) {}
40 IteratorT
begin()
const {
return begin_iterator_; }
41 IteratorT
end()
const {
return end_iterator_; }
49 template <
class It = IteratorT>
50 typename std::enable_if<std::is_base_of<std::random_access_iterator_tag,
51 typename std::iterator_traits<
59 bool empty()
const {
return begin_iterator_ == end_iterator_; }
62 IteratorT begin_iterator_, end_iterator_;
81 template <
typename Collection>
std::enable_if< std::is_base_of< std::random_access_iterator_tag, typename std::iterator_traits< It >::iterator_category >::value, size_t >::type size() const
typename std::iterator_traits< IteratorT >::value_type value_type
iterator_range(IteratorT begin_iterator, IteratorT end_iterator)
auto collection_to_range(Collection &c)
iterator_range< T > make_range(T x, T y)