]> granicus.if.org Git - taglib/commitdiff
Fix ByteVector to return correct iterators after detached.
authorTsuda Kageyu <tsuda.kageyu@gmail.com>
Wed, 29 Apr 2015 01:28:08 +0000 (10:28 +0900)
committerTsuda Kageyu <tsuda.kageyu@gmail.com>
Wed, 29 Apr 2015 01:28:08 +0000 (10:28 +0900)
taglib/toolkit/tbytevector.cpp
tests/test_bytevector.cpp

index 354673ca4c7fb8cda409c7585ca33251c3268f98..4ae40666b5a60ecc56c8bfeb34727279caef4ec8 100644 (file)
@@ -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<char> &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<char> &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
index 61b39e05d57abe06eda437ef80bb589319af1cf0..64f3238fdf37871780a39ae0e549b11471827401 100644 (file)
@@ -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());
   }
 
 };