Add String:rfind

git-svn-id: svn://anonsvn.kde.org/home/kde/trunk/kdesupport/taglib@961188 283d02a7-25f6-0310-bc7c-ecb5cbfe19da
This commit is contained in:
Lukáš Lalinský 2009-04-29 15:57:05 +00:00
parent 321997c399
commit a9bce47f96
3 changed files with 32 additions and 0 deletions

View File

@ -293,6 +293,17 @@ int String::find(const String &s, int offset) const
return -1;
}
int String::rfind(const String &s, int offset) const
{
wstring::size_type position =
d->data.rfind(s.d->data, offset == -1 ? wstring::npos : offset);
if(position != wstring::npos)
return position;
else
return -1;
}
bool String::startsWith(const String &s) const
{
if(s.length() > length())

View File

@ -225,6 +225,13 @@ namespace TagLib {
*/
int find(const String &s, int offset = 0) const;
/*!
* Finds the last occurrence of pattern \a s in this string, searched backwards,
* either from the end of the string or starting from \a offset. If the pattern
* is not found, -1 is returned.
*/
int rfind(const String &s, int offset = -1) const;
/*!
* Returns true if the strings starts with the substring \a s.
*/

View File

@ -33,6 +33,7 @@ class TestString : public CppUnit::TestFixture
{
CPPUNIT_TEST_SUITE(TestString);
CPPUNIT_TEST(testString);
CPPUNIT_TEST(testRfind);
CPPUNIT_TEST(testUTF16Encode);
CPPUNIT_TEST(testUTF16Decode);
CPPUNIT_TEST(testUTF16DecodeInvalidBOM);
@ -151,6 +152,19 @@ public:
CPPUNIT_ASSERT_EQUAL(String("a"), b);
}
void testRfind()
{
CPPUNIT_ASSERT_EQUAL(-1, String("foo.bar").rfind(".", 0));
CPPUNIT_ASSERT_EQUAL(-1, String("foo.bar").rfind(".", 1));
CPPUNIT_ASSERT_EQUAL(-1, String("foo.bar").rfind(".", 2));
CPPUNIT_ASSERT_EQUAL(3, String("foo.bar").rfind(".", 3));
CPPUNIT_ASSERT_EQUAL(3, String("foo.bar").rfind(".", 4));
CPPUNIT_ASSERT_EQUAL(3, String("foo.bar").rfind(".", 5));
CPPUNIT_ASSERT_EQUAL(3, String("foo.bar").rfind(".", 6));
CPPUNIT_ASSERT_EQUAL(3, String("foo.bar").rfind(".", 7));
CPPUNIT_ASSERT_EQUAL(3, String("foo.bar").rfind("."));
}
};
CPPUNIT_TEST_SUITE_REGISTRATION(TestString);