Commit Graph

32 Commits

Author SHA1 Message Date
Vadim Zeitlin
1035ae27a7 Make wxSplit(wxJoin()) idempotent for string ending with escape
Previously, splitting a string obtained by joining together array
with (any but last) elements ending in the escape character (normally
the backslash), didn't recover the original array because the separator
character following it in the resulting string was considered to be
escaped by wxSplit().

Fix this by escaping the trailing escape character itself.

Add a test confirming that this works as expected now, document this
behaviour and also slightly simplify wxSPlit() logic.

See https://github.com/wxWidgets/wxWidgets/pull/2311

Closes #19131.
2021-04-07 01:38:43 +02:00
Vadim Zeitlin
6819b5512b Make BinarySearch() interface slightly more readable
Replace "equal" parameter with the (opposite) "lowerBound" one with a
more descriptive name, add a comment describing it and also remove the
default value to force explaining how it is used in the caller.

No real changes.
2021-02-26 16:25:28 +01:00
Pavel Tyunin
00fec01308 Fex search in wxSortedArrayString with custom compare function in STL build 2021-02-26 11:52:44 +02:00
Pavel Tyunin
2451f8085b Fix search in wxSortedArrayString with custom compare function 2021-02-25 21:28:32 +02:00
Vadim Zeitlin
8bf8cf4aae Fix link error due to StrCmpLogicalW() when using MSVC
Add the #pragma to link with shlwapi in the same object file which uses
this function, as even though the same pragma was already present in
other files, they could be completely discarded by the linker resulting
in link errors about unresolved StrCmpLogicalW() later.

Also move the MinGW-specific function declaration to the top of the
file, near the inclusion of the header which would normally declare it.
2020-12-08 16:43:33 +01:00
PB
f57f214122 Remove BCC-specific hdrstop pragma from everywhere 2020-10-12 21:58:37 +02:00
PB
198635ad68 Fix linking issue with wxCmpNatural() in static build
wxCmpNatural() had "inline" function specifier in a .cpp file
which made the function inaccessible outside that file in static builds.

Fix this by removing "inline", the function character is such that the
overhead by a function call should have negligible impact on its
performance.

Closes https://github.com/wxWidgets/wxWidgets/pull/2050

Closes #18919.
2020-09-20 18:21:23 +02:00
PB
a4647825cb Do not use wxRegEx in wxCmpNaturalGeneric()
Using wxRegEx in wxCmpNaturalGeneric() introduced a dependency of the
base library on the regex library.

Replace wxRegEx with character classification functions wxIsspace(),
wxIspunct(), and wxIsdigit() to remove this rather unnecessary
dependency.

Closes https://github.com/wxWidgets/wxWidgets/pull/2014
2020-08-14 19:26:33 +02:00
Paul Cornett
f07197e2ba Avoid -Wimplicit-fallthrough warnings 2020-07-08 08:34:21 -07:00
PB
83a2a1e505 Refactor the natural string compare and sort algorithm
Add a new string fragment type for whitespace and punctuation which needs
to be assessed separately from letters and symbols.

Use wxUint64 instead of long for storing the value for numeric fragment.

Use collate instead of compare for non-numeric fragments.

Change names for the public comparison functions: wxWidgets provided function
is now named wxCmpGenericNatural() and for common public use is wxCmpNatural()
which calls a native function in wxMSW and wxCmpGenericNatural() elsewhere.

Try harder in wxCmpNaturalGeneric() if wxRegEx is unavailable: do not
just make a simple string comparison, but perform a case-insensitive
collation.

Make some other changes to simplify and possibly speed up the code.
2020-07-07 23:10:18 +02:00
Hugo Elias
371c4b1366 Add functions for sorting strings in natural sort order
Use StrCmpLogicalW() under MSW and generic implementation under the
other platforms.

See https://github.com/wxWidgets/wxWidgets/pull/780
2020-07-07 23:10:11 +02:00
Maarten Bent
b931c4b52c Fix wxArrayString build error when using c++17 with MSVC
MSVC does not set the correct __cplusplus version, so check MSVC compiler
version as well.
2020-04-08 22:13:53 +02:00
Paul Cornett
fe1737d399 Reduce the scope of some local variables 2019-04-05 10:44:02 -07:00
Vadim Zeitlin
28342d7882 Fix building with wxUSE_STD_CONTAINERS=1 in C++17 mode
Don't use std::bind2nd() which doesn't exist in C++17 any longer.

Replace it with a lambda when using C++11 which is simpler and more
clear and also replace the use of functors in std::sort() calls with
lambdas.

Closes #18319.
2019-01-05 23:12:30 +01:00
Vadim Zeitlin
abce91f967 Remove dynarray.cpp source file
After the recent dynamic array macros refactoring, there was no
implementation of wxBaseArray any more and only wxArrayString-related
code remained in this file, so just move the latter to arrstr.cpp, where
it should have been put from the beginning (except that this code
probably predates arrstr.cpp addition), and remove the old file
entirely.
2018-06-20 13:59:03 +02:00
Vadim Zeitlin
abce2a9428 Use the same growth strategy in wxArrayString as in wxVector
Remove maximal reallocation size in wxArrayString too, as it was done
for wxVector a commit ago, and increase its size by 100% and not 50%
when it needs to grow.

There is no real reason to use different growth strategies in the two
classes and wxVector one seems to be better.
2017-11-19 22:02:26 +01:00
Vadim Zeitlin
d3132b114c Optimize memory allocation in wxArrayString ctors
Call assign() instead of Add() in a loop: this is not only shorter, but
also ensures that reserve() is called before starting the loop and all
the required memory is allocated at once.
2017-11-19 21:59:02 +01:00
Paul Cornett
6169ced23f Remove returns of wxEmptyString 2017-02-18 11:26:40 -08:00
Vadim Zeitlin
985ff1e26e Check for self-assignment in wxArrayString
Assigning array to itself destroyed its contents -- check for this now.

Closes #17619.
2016-08-09 01:07:59 +02:00
Vadim Zeitlin
45adc64f9f Fix inserting an element of wxArrayString itself back into it.
Do the insertion/addition before deallocating the old memory to allow things
like array.Add(array[0]) to work correctly.

Closes #2290.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@76909 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2014-07-13 14:30:22 +00:00
Vadim Zeitlin
e2e79bd000 Allow specifying custom comparator for wxSortedArrayString.
Add a possibility to order wxSortedArrayString in some order different from
the default alphabetical one.

Closes #16330.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@76751 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2014-06-23 01:08:50 +00:00
Vadim Zeitlin
3f66f6a5b3 Remove all lines containing cvs/svn "$Id$" keyword.
This keyword is not expanded by Git which means it's not replaced with the
correct revision value in the releases made using git-based scripts and it's
confusing to have lines with unexpanded "$Id$" in the released files. As
expanding them with Git is not that simple (it could be done with git archive
and export-subst attribute) and there are not many benefits in having them in
the first place, just remove all these lines.

If nothing else, this will make an eventual transition to Git simpler.

Closes #14487.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@74602 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2013-07-26 16:02:46 +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
3d156e937a Provide implementation for wxArrayString::resize().
This method was declared but not implemented in wxUSE_STL==0 build.

Also add unit test for this function.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@61947 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2009-09-16 23:18:48 +00:00
Stefan Neis
c6a9c07cda Sorry, needed to fix typo in previous commit.
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@59535 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2009-03-14 18:41:18 +00:00
Stefan Neis
d9a40f7b86 Update m_nSize when shrinking wxArrayString (fixes #10591).
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@59533 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2009-03-14 18:34:46 +00:00
Vadim Zeitlin
d11c9d86b6 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
2009-02-12 12:09:13 +00:00
Vadim Zeitlin
eaf6da0746 use std::sort() instead of qsort() to implement wxArrayString::Sort(), this makes it thread-safe without any extra hacks and also makes the code simpler
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@55317 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2008-08-27 19:40:20 +00:00
Václav Slavík
cfa3d7ba83 ANSI+Unicode compatibility fixes to wxArrayString
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@47009 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2007-06-28 18:56:00 +00:00
Václav Slavík
8650108199 don't use implicit wxString->char*/wchar_t* conversion, it will not be available in wxUSE_STL build in the future
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@46391 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2007-06-10 17:42:41 +00:00
Václav Slavík
e7aab1094d PCH-less compilation fix
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@45101 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2007-03-29 06:18:23 +00:00
Václav Slavík
a7ea63e21f split string.{h,cpp} into {string,stringimpl,arrstr}.{h,cpp} to make the files more managable
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@45098 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2007-03-28 11:35:07 +00:00