made wxArrayString::assign(iterator, iterator) a template function; also fixed a bad bug in it: it didn't call clear(); mention existence of std::vector-like methods in the docs
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@58843 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -91,6 +91,18 @@ public:
|
|||||||
|
|
||||||
#else // if !wxUSE_STL
|
#else // if !wxUSE_STL
|
||||||
|
|
||||||
|
// this shouldn't be defined for compilers not supporting template methods or
|
||||||
|
// without std::distance() -- and if all of the currently supported compilers
|
||||||
|
// do have it, then it can just be removed and wxHAS_VECTOR_TEMPLATE_ASSIGN
|
||||||
|
// code always used
|
||||||
|
#define wxHAS_VECTOR_TEMPLATE_ASSIGN
|
||||||
|
|
||||||
|
#ifdef wxHAS_VECTOR_TEMPLATE_ASSIGN
|
||||||
|
#include "wx/beforestd.h"
|
||||||
|
#include <iterator>
|
||||||
|
#include "wx/afterstd.h"
|
||||||
|
#endif // wxHAS_VECTOR_TEMPLATE_ASSIGN
|
||||||
|
|
||||||
class WXDLLIMPEXP_BASE wxArrayString
|
class WXDLLIMPEXP_BASE wxArrayString
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
@@ -265,7 +277,26 @@ public:
|
|||||||
wxArrayString(const_iterator first, const_iterator last)
|
wxArrayString(const_iterator first, const_iterator last)
|
||||||
{ Init(false); assign(first, last); }
|
{ Init(false); assign(first, last); }
|
||||||
wxArrayString(size_type n, const_reference v) { Init(false); assign(n, v); }
|
wxArrayString(size_type n, const_reference v) { Init(false); assign(n, v); }
|
||||||
void assign(const_iterator first, const_iterator last);
|
|
||||||
|
#ifdef wxHAS_VECTOR_TEMPLATE_ASSIGN
|
||||||
|
template <class Iterator>
|
||||||
|
void assign(Iterator first, Iterator last)
|
||||||
|
{
|
||||||
|
clear();
|
||||||
|
reserve(std::distance(first, last));
|
||||||
|
for(; first != last; ++first)
|
||||||
|
push_back(*first);
|
||||||
|
}
|
||||||
|
#else // !wxHAS_VECTOR_TEMPLATE_ASSIGN
|
||||||
|
void assign(const_iterator first, const_iterator last)
|
||||||
|
{
|
||||||
|
clear();
|
||||||
|
reserve(last - first);
|
||||||
|
for(; first != last; ++first)
|
||||||
|
push_back(*first);
|
||||||
|
}
|
||||||
|
#endif // wxHAS_VECTOR_TEMPLATE_ASSIGN/!wxHAS_VECTOR_TEMPLATE_ASSIGN
|
||||||
|
|
||||||
void assign(size_type n, const_reference v)
|
void assign(size_type n, const_reference v)
|
||||||
{ clear(); Add(v, n); }
|
{ clear(); Add(v, n); }
|
||||||
reference back() { return *(end() - 1); }
|
reference back() { return *(end() - 1); }
|
||||||
|
@@ -41,7 +41,10 @@
|
|||||||
a specialization of wxArray class for the wxString member data: it is not
|
a specialization of wxArray class for the wxString member data: it is not
|
||||||
implemented like this, but it does have all of the wxArray functions.
|
implemented like this, but it does have all of the wxArray functions.
|
||||||
|
|
||||||
@todo what about stl? how does it integrate?
|
It also has the full set of <tt>std::vector<wxString></tt> compatible
|
||||||
|
methods, including nested @c iterator and @c const_iterator classes which
|
||||||
|
should be used in the new code for forward compatibility with the future
|
||||||
|
wxWidgets versions.
|
||||||
|
|
||||||
@library{wxbase}
|
@library{wxbase}
|
||||||
@category{containers}
|
@category{containers}
|
||||||
|
@@ -378,13 +378,6 @@ void wxArrayString::Remove(const wxString& sz)
|
|||||||
RemoveAt(iIndex);
|
RemoveAt(iIndex);
|
||||||
}
|
}
|
||||||
|
|
||||||
void wxArrayString::assign(const_iterator first, const_iterator last)
|
|
||||||
{
|
|
||||||
reserve(last - first);
|
|
||||||
for(; first != last; ++first)
|
|
||||||
push_back(*first);
|
|
||||||
}
|
|
||||||
|
|
||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
// sorting
|
// sorting
|
||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
|
@@ -314,6 +314,19 @@ void ArraysTestCase::wxStringArrayTest()
|
|||||||
_T("a") ,
|
_T("a") ,
|
||||||
_T("a") ,
|
_T("a") ,
|
||||||
_T("a") ) );
|
_T("a") ) );
|
||||||
|
|
||||||
|
a5.assign(a1.end(), a1.end());
|
||||||
|
CPPUNIT_ASSERT( a5.empty() );
|
||||||
|
|
||||||
|
a5.assign(a1.begin(), a1.end());
|
||||||
|
CPPUNIT_ASSERT( a5 == a1 );
|
||||||
|
|
||||||
|
#ifdef wxHAS_VECTOR_TEMPLATE_ASSIGN
|
||||||
|
const wxString months[] = { "Jan", "Feb", "Mar" };
|
||||||
|
a5.assign(months, months + WXSIZEOF(months));
|
||||||
|
CPPUNIT_ASSERT_EQUAL( WXSIZEOF(months), a5.size() );
|
||||||
|
CPPUNIT_ASSERT( COMPARE_3_VALUES(a5, "Jan", "Feb", "Mar") );
|
||||||
|
#endif // wxHAS_VECTOR_TEMPLATE_ASSIGN
|
||||||
}
|
}
|
||||||
|
|
||||||
void ArraysTestCase::wxStringArraySplitTest()
|
void ArraysTestCase::wxStringArraySplitTest()
|
||||||
|
Reference in New Issue
Block a user