Commit Graph

73 Commits

Author SHA1 Message Date
Vadim Zeitlin
aee926f2d5 Make wxVector::reverse_iterator satisfy RandomAccessIterator
RandomAccessIterator requirements include LessThanComparable, so
implement the missing comparison operators for this class, as well as
for const_reverse_iterator.

This also fixes compilation problems with MSVS 2013 in debug mode, where
the CRT uses these operators to check the iterators correctness.

See https://github.com/wxWidgets/wxWidgets/pull/1048
2018-12-07 14:52:51 +01:00
Vadim Zeitlin
26b4701ebd Define wxShrinkToFit() helper for wxVector<>
Unlike member shrink_to_fit(), this function is always defined, even
when wxVector is pre-C++11 std::vector<>.
2018-09-17 23:19:23 +02:00
Vadim Zeitlin
cc8fccf0bc Make wxVector reverse iterators conform to iterator requirements
This is similar to a recent commit adding the missing typedefs to wxList
iterators and defines the types required by the iterator concept in
wxVector::reverse_iterator and const_reverse_iterator classes (simple
iterators are just pointers and are already covered by the standard
iterator_traits specialization).
2018-02-23 16:14:03 +01:00
Vadim Zeitlin
382a5a156e Use ptrdiff_t as wxVector::difference_type instead of size_t
difference_type must be signed, using size_t was clearly a mistake.
2018-02-23 16:10:07 +01:00
Vadim Zeitlin
c3dee8b0bc Merge branch 'vector-enhancements'
Make wxVector<> more compatible with std::vector<>.
2017-11-21 13:50:26 +01:00
Vadim Zeitlin
53443b5370 Add wxVector::shrink_to_fit() for C++11 compatibility
Also use this for wxArray::Shrink() implementation as it's more
efficient than the old swap-based implementation which requires an extra
memory allocation instead of really shrinking the existing one.
2017-11-19 22:09:37 +01:00
Vadim Zeitlin
9e714fdb5e Fix wxVector::assign() for integer parameters
Using assign() with int (in fact, any integral type) should select the
(size_type count, const T& value) overload, but didn't, which was
incompatible with std::vector<>.

Fix this by adding the same tag-dispatching technique as used by the
real std::vector<> implementations themselves, except that we dispatch
on integer types because we can't be totally certain that
std::iterator_traits<> are specialized for whatever iterator-like object
could be used with wxVector.
2017-11-19 22:08:54 +01:00
Vadim Zeitlin
8246c922af Add wxVector::insert() overload taking count of items to insert
Generalize the existing insert() to be more compatible with std::vector.
2017-11-19 22:08:54 +01:00
Vadim Zeitlin
25a7c70631 Implement wxVector::reverse_iterator::operator-()
Make wxVector reverse iterators (and const versions of them) more
compatible with the std::vector ones.
2017-11-19 22:08:54 +01:00
Vadim Zeitlin
5669e8dbe9 Add wxVector::operator==() and !=()
Make this class more consistent with std::vector<>.
2017-11-19 22:08:54 +01:00
Vadim Zeitlin
876090aeea Remove maximal reallocation size in wxVector
This dramatically pessimizes performance for large vector sizes and
doesn't actually save that much memory because all intermediate
allocations are still being used by the process, so follow stdlibc++
example and just double the allocated buffer size without limit.
2017-11-19 21:56:24 +01:00
ARATA Mizuki
8cfc74491a Replace wxEXPLICIT with the 'explicit' keyword
See #17655.
2016-09-14 18:45:12 +09:00
Vadim Zeitlin
f4b80e5337 Remove MSVC6 support.
Don't support this compiler any more, this allows to get rid of tons of
MSVC6-specific workarounds, in particular we can now use Bind() and natural
template functions calls in the library code.

Also remove MSVC6 project and solution files and don't generate them when
bakefile_gen is ran any more (removing the remaining occurrences of msvc6prj
from the bakefiles results in weird bake-time errors, so it's simpler to just
leave them there).

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@76532 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2014-05-15 22:32:17 +00:00
Vadim Zeitlin
5a25d8d55a Don't allocate way too much memory in wxVector::reserve().
We multiplied the number of items by the size of each element twice, once in
wxVector::reserve() itself and once in Ops::Realloc() it called, so we
allocated much more memory than actually needed.

Fix this by passing the number of elements to Ops::Realloc().

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@75246 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2013-11-19 13:13:22 +00:00
Vadim Zeitlin
4a8e979925 Add ctor and assign() taking an iterator range to wxVector<>.
Do it for consistency with wxArray and std::vector<>, even if the current
implementation is suboptimal.

See #15216.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@74045 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2013-05-22 14:13:26 +00:00
Vadim Zeitlin
f7ef20685f Add wxVector<>::const_reverse_iterator.
Provide this type too for compatibility with std::vector<>.

Closes #15192.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@73947 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2013-05-08 11:21:32 +00:00
Paul Cornett
8c1c11d689 declare wxQsort in vector.h as well as utils.h to work around circular header dependency mess
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@73058 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2012-11-29 07:53:21 +00:00
Paul Cornett
da63066b65 silence GCC warning "enumeral and non-enumeral type in conditional expression"
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@73005 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2012-11-24 21:49:04 +00:00
Vadim Zeitlin
84523830d5 Don't include wx/utils.h from wx/vector.h.
This will allow to include wx/vector.h from wx/list.h which is itself included
from wx/utils.h by breaking this circular dependency.

Don't use wxMin(), defined in wx/utils.h, in order to do this.

See #14814.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@73002 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2012-11-24 17:36:19 +00:00
Vadim Zeitlin
2ff86a86a7 Add wxVector::assign().
Closes #14703.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@72748 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2012-10-24 14:01:44 +00:00
Vadim Zeitlin
449cc35153 Don't make wxQsort() extern "C" nor use any special convention for it.
It doesn't make sense to require passing C functions to wxQsort() that we
define in a C++ library. We also don't need any special calling convention
here.

Notice that the only existing uses of wxQsort() inside wxWidgets itself were
not actually extern "C" and one of them didn't even use the correct calling
convention.

Also avoid using non-wx-prefixed CMPFUNCDATA identifier in a public header,
rename it to wxSortCallback instead.

Finally make wxQsort() documentation slightly more useful.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@69566 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2011-10-27 21:10:48 +00:00
Vadim Zeitlin
01871bf642 Add wxUSE_STD_CONTAINERS and turn it on by default.
Previously, wxUSE_STL enabled both implicit conversion of wxString to
std::[w]string and use of standard containers for the implementation of their
wx equivalents. Split up the two roles now by allowing to enable the use of
the standard containers independently of (backwards incompatible) implicit
conversion in wxString and actually enable wxUSE_STD_CONTAINERS by default.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@67343 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2011-03-30 14:16:04 +00:00
Vadim Zeitlin
258593354e Fix build with Borland C++ compiler.
Disable some parts of the code that this compiler had problems with. Add
parentheses to work around its bugs elsewhere.

Closes #12558.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@66054 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2010-11-07 13:16:20 +00:00
Vadim Zeitlin
d8eff331e2 Use template class instead of template function in wxVectorSort().
This allows the code to compile with VC6 which has trouble with explicit
specification of the template functions instantiation.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@63940 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2010-04-11 17:38:01 +00:00
Robin Dunn
0a492dbe7a #include <algorithm>
to fix problem in PCH-less STL builds

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@63909 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2010-04-07 22:23:45 +00:00
Robin Dunn
068c8da4a8 (blind) fix for buildbot breakage with MSVC 6
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@63907 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2010-04-07 21:56:08 +00:00
Robin Dunn
38723be1d5 Add wxVectorSort function for sorting wxVector<T> containers. Closes #11889
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@63904 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2010-04-07 20:32:25 +00:00
Vadim Zeitlin
dbe0872fc8 Added wxVector::swap().
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@61415 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2009-07-12 17:00:29 +00:00
Vadim Zeitlin
f6363458bc avoid g++ 4.3 warnings about conflict between parameter and method names (closes #10843)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@60772 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2009-05-28 09:49:20 +00:00
Vadim Zeitlin
fa8224a15a reverted apparently accidental change of r57896
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@57974 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2009-01-10 14:55:56 +00:00
Jouk Jansen
2e8fd8cc40 insert missing iclude file
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@57896 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2009-01-07 19:50:26 +00:00
Vadim Zeitlin
e068310a5a added wxVector::resize()
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@57248 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2008-12-11 13:45:04 +00:00
Vadim Zeitlin
8d00e34735 fix typo in new wxVector(size_t, T) ctor
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@57036 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2008-11-30 03:49:02 +00:00
Vadim Zeitlin
664e5ff93e add wxVector(size_t size[, const value_type& value]) ctors
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@57031 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2008-11-29 22:28:44 +00:00
Paul Cornett
a09307abba check for self assignment in operator=
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@56794 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2008-11-16 18:03:08 +00:00
Vadim Zeitlin
0e82d27088 use explicit global scope for a couple of more occurrences of new
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@56733 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2008-11-10 23:55:01 +00:00
Vadim Zeitlin
54742e3426 use global operator new to fix compilation errors if type T overloads new (as wxObject does with wxUSE_MEMORY_TRACING)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@56714 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2008-11-09 12:34:21 +00:00
Vadim Zeitlin
deb0c40261 remove extraneous returns
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@56434 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2008-10-19 10:16:47 +00:00
Vadim Zeitlin
fc31181d2c use wxScopeGuard instead of an explicit try/catch(...)/throw: this suppresses wxUSE_EXCEPTIONS tests and also avoids MSVC unreachable code warnings
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@56195 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2008-10-09 11:27:59 +00:00
Robert Roebling
946954d3bf Added reverse iterator to wxVector<T>
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@55654 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2008-09-16 12:43:11 +00:00
Vadim Zeitlin
a470957ada fix fatal bug in wxVector copy ctor
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@54964 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2008-08-03 23:58:24 +00:00
Vadim Zeitlin
0c73d13351 no changes, just fix a typo in comment
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@51474 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2008-01-31 17:21:41 +00:00
Václav Slavík
c9faa9e9a2 Fixed compilation of wxVector<T> with VC6:
* reverted VC6 hack in wxIf<>, using helper struct instead of typedef
  didn't fix compilation, only caused the compiler to crash instead
  of emitting semi-useful errors
* changed wxVector to use typedef for Ops class instead of privately
  deriving from wxIf<...>::value; this is enough to make VC6 happy



git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@51471 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2008-01-31 11:26:52 +00:00
Václav Slavík
6712283cf1 fixed wxVector<T> to work with non-POD types again; added optimization to keep using (much faster) realloc with types that are movable
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@51330 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2008-01-22 11:29:21 +00:00
Václav Slavík
7df6b37a50 reverted last commit, it was wrong
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@51303 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2008-01-21 08:45:19 +00:00
Václav Slavík
17c4163028 utils.h is not needed by wxVector, removed
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@51302 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2008-01-21 08:42:56 +00:00
Julian Smart
82b6efd2c2 Fix for VC++ 6 error
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@51147 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2008-01-10 12:10:03 +00:00
Václav Slavík
c157b27e66 Use realloc() and placement new to manage vector's memory instead of
copying objects in T[] array. This is both more efficient and
matches std::vector<> semantics (erase() destroys the object immediately,
T doesn't have to be default-constructible).



git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@50996 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2008-01-02 22:58:29 +00:00
Vadim Zeitlin
32aa5bda92 made deprecated erase() overload inline
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@50843 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2007-12-20 00:53:24 +00:00
Vadim Zeitlin
f5851311d3 fix several mingw32 warnings (patch from Tim Stahlhut)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@49017 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2007-10-02 11:36:35 +00:00