Add C++20-style starts_with()/ends_with() functions to wxString
C++20 introduces these two functions, along with some overloads, to std::string. Add similar functions to wxString, which simply call the already existing StartsWith() and EndsWith(). Closes https://github.com/wxWidgets/wxWidgets/pull/1452
This commit is contained in:
committed by
Vadim Zeitlin
parent
a8c4cbee09
commit
4739b9dedd
@@ -3255,6 +3255,20 @@ public:
|
||||
size_t find_last_not_of(const wxScopedWCharBuffer& sz, size_t nStart, size_t n) const
|
||||
{ return find_last_not_of(sz.data(), nStart, n); }
|
||||
|
||||
bool starts_with(const wxString &str) const
|
||||
{ return StartsWith(str); }
|
||||
bool starts_with(const char *sz) const
|
||||
{ return StartsWith(sz); }
|
||||
bool starts_with(const wchar_t *sz) const
|
||||
{ return StartsWith(sz); }
|
||||
|
||||
bool ends_with(const wxString &str) const
|
||||
{ return EndsWith(str); }
|
||||
bool ends_with(const char *sz) const
|
||||
{ return EndsWith(sz); }
|
||||
bool ends_with(const wchar_t *sz) const
|
||||
{ return EndsWith(sz); }
|
||||
|
||||
// string += string
|
||||
wxString& operator+=(const wxString& s)
|
||||
{
|
||||
|
@@ -1711,6 +1711,14 @@ public:
|
||||
wxString substr(size_t nStart = 0, size_t nLen = npos) const;
|
||||
void swap(wxString& str);
|
||||
|
||||
bool starts_with(const wxString &str) const;
|
||||
bool starts_with(const char *sz) const;
|
||||
bool starts_with(const wchar_t *sz) const;
|
||||
|
||||
bool ends_with(const wxString &str) const;
|
||||
bool ends_with(const char *sz) const;
|
||||
bool ends_with(const wchar_t *sz) const;
|
||||
|
||||
//@}
|
||||
|
||||
|
||||
|
@@ -43,6 +43,7 @@ private:
|
||||
CPPUNIT_TEST( StdFind );
|
||||
CPPUNIT_TEST( StdFindFirst );
|
||||
CPPUNIT_TEST( StdFindLast );
|
||||
CPPUNIT_TEST( StdStartsEndsWith );
|
||||
CPPUNIT_TEST( StdInsert );
|
||||
CPPUNIT_TEST( StdReplace );
|
||||
CPPUNIT_TEST( StdRFind );
|
||||
@@ -65,6 +66,7 @@ private:
|
||||
void StdFind();
|
||||
void StdFindFirst();
|
||||
void StdFindLast();
|
||||
void StdStartsEndsWith();
|
||||
void StdInsert();
|
||||
void StdReplace();
|
||||
void StdRFind();
|
||||
@@ -396,6 +398,28 @@ void StdStringTestCase::StdFindLast()
|
||||
CPPUNIT_ASSERT( s1.find_last_of(wxT("a"), 18) == 18u );
|
||||
}
|
||||
|
||||
void StdStringTestCase::StdStartsEndsWith()
|
||||
{
|
||||
const wxString s(wxT("Hello, world!"));
|
||||
CPPUNIT_ASSERT_EQUAL( true, s.starts_with(wxT("Hello")) );
|
||||
CPPUNIT_ASSERT_EQUAL( true, s.starts_with(wxT("Hello, ")) );
|
||||
CPPUNIT_ASSERT_EQUAL( true, s.starts_with(wxT("Hello, world!")) );
|
||||
CPPUNIT_ASSERT_EQUAL( false, s.starts_with(wxT("Hello, world!!!")) );
|
||||
CPPUNIT_ASSERT_EQUAL( true, s.starts_with(wxT("")) );
|
||||
CPPUNIT_ASSERT_EQUAL( false, s.starts_with(wxT("Goodbye")) );
|
||||
CPPUNIT_ASSERT_EQUAL( false, s.starts_with(wxT("Hi")) );
|
||||
|
||||
CPPUNIT_ASSERT_EQUAL( true, s.ends_with(wxT("Hello, world!")) );
|
||||
CPPUNIT_ASSERT_EQUAL( true, s.ends_with(wxT("world!")) );
|
||||
CPPUNIT_ASSERT_EQUAL( false, s.ends_with(wxT("Hello")) );
|
||||
CPPUNIT_ASSERT_EQUAL( true, s.ends_with(wxT("!")) );
|
||||
CPPUNIT_ASSERT_EQUAL( true, s.ends_with(wxT("")) );
|
||||
CPPUNIT_ASSERT_EQUAL( false, s.ends_with(wxT("very long string")) );
|
||||
CPPUNIT_ASSERT_EQUAL( false, s.ends_with(wxT("?")) );
|
||||
CPPUNIT_ASSERT_EQUAL( false, s.ends_with(wxT("Hello, world")) );
|
||||
CPPUNIT_ASSERT_EQUAL( false, s.ends_with(wxT("Gello, world!")) );
|
||||
}
|
||||
|
||||
void StdStringTestCase::StdInsert()
|
||||
{
|
||||
wxString s1, s2, s3, s4, s5, s6, s7, s8, s9, s10;
|
||||
|
Reference in New Issue
Block a user