ByteVector::Iterator ByteVector::begin()
{
- return d->data->data.begin() + d->offset;
+ detach();
+ return d->data->data.begin();
}
ByteVector::ConstIterator ByteVector::begin() const
ByteVector::Iterator ByteVector::end()
{
- return d->data->data.begin() + d->offset + d->length;
+ detach();
+ return d->data->data.end();
}
ByteVector::ConstIterator ByteVector::end() const
ByteVector::ReverseIterator ByteVector::rbegin()
{
- std::vector<char> &v = d->data->data;
- return v.rbegin() + (v.size() - (d->offset + d->length));
+ detach();
+ return d->data->data.rbegin();
}
ByteVector::ConstReverseIterator ByteVector::rbegin() const
ByteVector::ReverseIterator ByteVector::rend()
{
- std::vector<char> &v = d->data->data;
- return v.rbegin() + (v.size() - d->offset);
+ detach();
+ return d->data->data.rend();
}
ByteVector::ConstReverseIterator ByteVector::rend() const
template <class T>
typename List<T>::Iterator List<T>::find(const T &value)
{
+ detach();
return std::find(d->list.begin(), d->list.end(), value);
}
String::Iterator String::begin()
{
+ detach();
return d->data.begin();
}
String::Iterator String::end()
{
+ detach();
return d->data.end();
}
CPPUNIT_TEST(testToHex);
CPPUNIT_TEST(testNumericCoversion);
CPPUNIT_TEST(testReplace);
+ CPPUNIT_TEST(testIterator);
CPPUNIT_TEST_SUITE_END();
public:
}
}
+ void testIterator()
+ {
+ ByteVector v1("taglib");
+ ByteVector v2 = v1;
+
+ ByteVector::Iterator it1 = v1.begin();
+ ByteVector::Iterator it2 = v2.begin();
+
+ CPPUNIT_ASSERT_EQUAL('t', *it1);
+ CPPUNIT_ASSERT_EQUAL('t', *it2);
+
+ std::advance(it1, 4);
+ std::advance(it2, 4);
+ *it2 = 'I';
+ CPPUNIT_ASSERT_EQUAL('i', *it1);
+ CPPUNIT_ASSERT_EQUAL('I', *it2);
+
+ ByteVector::ReverseIterator it3 = v1.rbegin();
+ ByteVector::ReverseIterator it4 = v2.rbegin();
+
+ CPPUNIT_ASSERT_EQUAL('b', *it3);
+ CPPUNIT_ASSERT_EQUAL('b', *it4);
+
+ std::advance(it3, 4);
+ std::advance(it4, 4);
+ *it4 = 'A';
+ CPPUNIT_ASSERT_EQUAL('a', *it3);
+ CPPUNIT_ASSERT_EQUAL('A', *it4);
+ }
+
};
CPPUNIT_TEST_SUITE_REGISTRATION(TestByteVector);
l3.append(3);
l3.append(4);
CPPUNIT_ASSERT(l1 == l3);
+
+ List<int> l4 = l1;
+ List<int>::Iterator it = l4.find(3);
+ *it = 33;
+ CPPUNIT_ASSERT_EQUAL(l1[2], 3);
+ CPPUNIT_ASSERT_EQUAL(l4[2], 33);
}
-
};
CPPUNIT_TEST_SUITE_REGISTRATION(TestList);
void testInsert()
{
- Map<String, int> m;
- m.insert("foo", 3);
- CPPUNIT_ASSERT_EQUAL(3, m["foo"]);
- m.insert("foo", 7);
- CPPUNIT_ASSERT_EQUAL(7, m["foo"]);
+ Map<String, int> m1;
+ m1.insert("foo", 3);
+ CPPUNIT_ASSERT_EQUAL(3, m1["foo"]);
+ m1.insert("foo", 7);
+ CPPUNIT_ASSERT_EQUAL(7, m1["foo"]);
+
+ m1.insert("alice", 5);
+ m1.insert("bob", 9);
+ m1.insert("carol", 11);
+
+ Map<String, int> m2 = m1;
+ Map<String, int>::Iterator it = m2.find("bob");
+ (*it).second = 99;
+ CPPUNIT_ASSERT_EQUAL(m1["bob"], 9);
+ CPPUNIT_ASSERT_EQUAL(m2["bob"], 99);
}
};
CPPUNIT_TEST(testSubstr);
CPPUNIT_TEST(testNewline);
CPPUNIT_TEST(testEncode);
+ CPPUNIT_TEST(testIterator);
CPPUNIT_TEST_SUITE_END();
public:
CPPUNIT_ASSERT(empty7.empty());
}
+ void testIterator()
+ {
+ String s1 = "taglib string";
+ String s2 = s1;
+
+ String::Iterator it1 = s1.begin();
+ String::Iterator it2 = s2.begin();
+
+ CPPUNIT_ASSERT_EQUAL(L't', *it1);
+ CPPUNIT_ASSERT_EQUAL(L't', *it2);
+
+ std::advance(it1, 4);
+ std::advance(it2, 4);
+ *it2 = L'I';
+ CPPUNIT_ASSERT_EQUAL(L'i', *it1);
+ CPPUNIT_ASSERT_EQUAL(L'I', *it2);
+ }
+
};
CPPUNIT_TEST_SUITE_REGISTRATION(TestString);