Commit c7a797b9 authored by Vladimir Glavnyy's avatar Vladimir Glavnyy Committed by Wouter van Oortmerssen

Makes VectorIterator compatible with STL iterators. (#4768)

parent ecc07e77
...@@ -91,7 +91,7 @@ template<typename T> struct IndirectHelper<const T *> { ...@@ -91,7 +91,7 @@ template<typename T> struct IndirectHelper<const T *> {
template<typename T, typename IT> struct VectorIterator { template<typename T, typename IT> struct VectorIterator {
typedef std::random_access_iterator_tag iterator_category; typedef std::random_access_iterator_tag iterator_category;
typedef IT value_type; typedef IT value_type;
typedef uoffset_t difference_type; typedef ptrdiff_t difference_type;
typedef IT *pointer; typedef IT *pointer;
typedef IT &reference; typedef IT &reference;
...@@ -121,7 +121,7 @@ template<typename T, typename IT> struct VectorIterator { ...@@ -121,7 +121,7 @@ template<typename T, typename IT> struct VectorIterator {
return data_ != other.data_; return data_ != other.data_;
} }
ptrdiff_t operator-(const VectorIterator &other) const { difference_type operator-(const VectorIterator &other) const {
return (data_ - other.data_) / IndirectHelper<T>::element_stride; return (data_ - other.data_) / IndirectHelper<T>::element_stride;
} }
......
...@@ -273,8 +273,13 @@ void AccessFlatBufferTest(const uint8_t *flatbuf, size_t length, ...@@ -273,8 +273,13 @@ void AccessFlatBufferTest(const uint8_t *flatbuf, size_t length,
TEST_EQ(VectorLength(inventory), 10UL); // Works even if inventory is null. TEST_EQ(VectorLength(inventory), 10UL); // Works even if inventory is null.
TEST_NOTNULL(inventory); TEST_NOTNULL(inventory);
unsigned char inv_data[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 }; unsigned char inv_data[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
for (auto it = inventory->begin(); it != inventory->end(); ++it) // Check compatibilty of iterators with STL.
TEST_EQ(*it, inv_data[it - inventory->begin()]); std::vector<unsigned char> inv_vec(inventory->begin(), inventory->end());
for (auto it = inventory->begin(); it != inventory->end(); ++it) {
auto indx = it - inventory->begin();
TEST_EQ(*it, inv_vec.at(indx)); // Use bounds-check.
TEST_EQ(*it, inv_data[indx]);
}
TEST_EQ(monster->color(), Color_Blue); TEST_EQ(monster->color(), Color_Blue);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment