@@ -27,14 +27,15 @@ struct String;
2727
2828// An STL compatible iterator implementation for Vector below, effectively
2929// calling Get() for every element.
30- template <typename T, typename IT> struct VectorIterator {
30+ template <typename T, typename IT, typename Data = uint8_t *>
31+ struct VectorIterator {
3132 typedef std::random_access_iterator_tag iterator_category;
3233 typedef IT value_type;
3334 typedef ptrdiff_t difference_type;
3435 typedef IT *pointer;
3536 typedef IT &reference;
3637
37- VectorIterator (const uint8_t * data, uoffset_t i)
38+ VectorIterator (Data data, uoffset_t i)
3839 : data_(data + IndirectHelper<T>::element_stride * i) {}
3940 VectorIterator (const VectorIterator &other) : data_(other.data_) {}
4041 VectorIterator () : data_(nullptr ) {}
@@ -116,9 +117,12 @@ template<typename T, typename IT> struct VectorIterator {
116117 }
117118
118119 private:
119- const uint8_t * data_;
120+ Data data_;
120121};
121122
123+ template <typename T, typename IT>
124+ using VectorConstIterator = VectorIterator<T, IT, const uint8_t *>;
125+
122126template <typename Iterator>
123127struct VectorReverseIterator : public std ::reverse_iterator<Iterator> {
124128 explicit VectorReverseIterator (Iterator iter)
@@ -145,7 +149,7 @@ template<typename T> class Vector {
145149 public:
146150 typedef VectorIterator<T, typename IndirectHelper<T>::mutable_return_type>
147151 iterator;
148- typedef VectorIterator <T, typename IndirectHelper<T>::return_type>
152+ typedef VectorConstIterator <T, typename IndirectHelper<T>::return_type>
149153 const_iterator;
150154 typedef VectorReverseIterator<iterator> reverse_iterator;
151155 typedef VectorReverseIterator<const_iterator> const_reverse_iterator;
0 commit comments