From ab047f6054e4d2af2774db466a1651e8a26a114e Mon Sep 17 00:00:00 2001 From: Tsuda Kageyu Date: Wed, 29 Apr 2015 10:28:08 +0900 Subject: [PATCH] Fix ByteVector to return correct iterators after detached. --- taglib/toolkit/tbytevector.cpp | 14 ++++++-------- tests/test_bytevector.cpp | 4 ++++ 2 files changed, 10 insertions(+), 8 deletions(-) diff --git a/taglib/toolkit/tbytevector.cpp b/taglib/toolkit/tbytevector.cpp index 354673ca..4ae40666 100644 --- a/taglib/toolkit/tbytevector.cpp +++ b/taglib/toolkit/tbytevector.cpp @@ -712,7 +712,7 @@ ByteVector &ByteVector::resize(uint size, char padding) ByteVector::Iterator ByteVector::begin() { detach(); - return d->data->data.begin(); + return d->data->data.begin() + d->offset; } ByteVector::ConstIterator ByteVector::begin() const @@ -723,7 +723,7 @@ ByteVector::ConstIterator ByteVector::begin() const ByteVector::Iterator ByteVector::end() { detach(); - return d->data->data.end(); + return d->data->data.begin() + d->offset + d->length; } ByteVector::ConstIterator ByteVector::end() const @@ -734,25 +734,23 @@ ByteVector::ConstIterator ByteVector::end() const ByteVector::ReverseIterator ByteVector::rbegin() { detach(); - return d->data->data.rbegin(); + return d->data->data.rbegin() + (d->data->data.size() - (d->offset + d->length)); } ByteVector::ConstReverseIterator ByteVector::rbegin() const { - std::vector &v = d->data->data; - return v.rbegin() + (v.size() - (d->offset + d->length)); + return d->data->data.rbegin() + (d->data->data.size() - (d->offset + d->length)); } ByteVector::ReverseIterator ByteVector::rend() { detach(); - return d->data->data.rend(); + return d->data->data.rbegin() + (d->data->data.size() - d->offset); } ByteVector::ConstReverseIterator ByteVector::rend() const { - std::vector &v = d->data->data; - return v.rbegin() + (v.size() - d->offset); + return d->data->data.rbegin() + (d->data->data.size() - d->offset); } bool ByteVector::isNull() const diff --git a/tests/test_bytevector.cpp b/tests/test_bytevector.cpp index 61b39e05..64f3238f 100644 --- a/tests/test_bytevector.cpp +++ b/tests/test_bytevector.cpp @@ -319,6 +319,10 @@ public: *it4 = 'A'; CPPUNIT_ASSERT_EQUAL('a', *it3); CPPUNIT_ASSERT_EQUAL('A', *it4); + + ByteVector v3; + v3 = ByteVector("taglib").mid(3); + CPPUNIT_ASSERT_EQUAL('l', *v3.begin()); } };