29struct iterator_range_pod {
30 iterator_range_pod(
const DataType* begin,
const DataType* end) : begin_(begin), end_(end) {}
31 iterator_range_pod() =
default;
33 size_t size()
const {
return std::distance(begin_,end_); }
34 bool empty()
const {
return begin_ == end_; }
35 bool operator==(
const iterator_range_pod<DataType>& rhs)
const
36 {
return (begin_ == rhs.begin_) && (end_ == rhs.end_); }
38 const DataType& operator[](
int idx)
const {
return begin_[idx]; }
40 const DataType* begin()
const {
return begin_; }
41 const DataType* end()
const {
return end_; }
44 const DataType* begin_;
50struct iterator_range {
51 iterator_range(Iter begin, Iter end) : begin_(begin), end_(end) {}
52 iterator_range() =
default;
54 size_t size()
const {
return std::distance(begin_,end_); }
55 bool empty()
const {
return begin_ == end_; }
56 bool operator==(
const iterator_range<Iter>& rhs)
const
57 {
return (begin_ == rhs.begin_) && (end_ == rhs.end_); }
59 const typename Iter::value_type& operator[](
int idx)
const
60 {
return *(begin_+ idx); }
62 Iter begin()
const {
return begin_; }
63 Iter end()
const {
return end_; }
70struct mutable_iterator_range {
71 mutable_iterator_range(Iter begin, Iter end) : begin_(begin), end_(end) {}
72 mutable_iterator_range() =
default;
74 size_t size()
const {
return std::distance(begin_,end_); }
75 bool empty()
const {
return begin_ == end_; }
76 bool operator==(
const Iter& rhs)
const
77 {
return (begin_ == rhs.begin_) && (end_ == rhs.end_); }
79 typename Iter::value_type& operator[](
int idx)
80 {
return begin_[idx]; }
82 Iter begin()
const {
return begin_; }
83 Iter end()
const {
return end_; }