#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
{
public:
wxArrayString(const_iterator first, const_iterator last)
{ Init(false); assign(first, last); }
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)
{ clear(); Add(v, n); }
reference back() { return *(end() - 1); }
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.
- @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}
@category{containers}
RemoveAt(iIndex);
}
-void wxArrayString::assign(const_iterator first, const_iterator last)
-{
- reserve(last - first);
- for(; first != last; ++first)
- push_back(*first);
-}
-
// ----------------------------------------------------------------------------
// sorting
// ----------------------------------------------------------------------------
_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()