Commit graph

70 commits

Author SHA1 Message Date
Vadim Zeitlin
dede4b9326 Use "= default" for all trivial default ctors and dtors
Replace user-specified empty constructors and destructors with the
compiler-generated versions, which has a number of advantages for code
generation, in addition to being more clear.

Closes #22965.

Closes #24058.
2023-11-17 01:33:32 +01:00
Vadim Zeitlin
92649ca2e6 Fix formatting string_view in UTF-8 build
Don't use string_view data directly, as this doesn't respect its length
and would use the entire rest of the string this view is based on.

Instead, make a copy of just the part corresponding in the view to
ensure that it is NUL-terminated and also use a temporary buffer to hold
it to ensure that it lives long enough.
2023-03-28 13:48:13 +01:00
Vadim Zeitlin
94e3827988 Remove leftover blocks that used to be used in ANSI build
Update some comments and prefer using #if/#else when testing for
wxUSE_UNICODE_UTF8 and wxUSE_UNICODE_WCHAR rather than #if/#elif as
exactly one of them is always defined now. Similarly, test for
wxUSE_UNICODE_WCHAR directly instead of testing !wxUSE_UNICODE_UTF8 and
vice versa.

It could be nice to actually test for just a single one of these symbols
everywhere, but this would require a lot of noisy changes, so for now
keep the code as is.

No real changes, just simplify.
2023-01-12 17:08:59 +00:00
Vadim Zeitlin
ac4767c47f Add comment clarifying wx/strvararg.h status
This header contains a lot of stuff which is better left unchanged, as
updating application code using it would be quite non-trivial if we
removed it, but at least mention that it's unused and should be ignored.
2022-11-23 19:21:36 +01:00
Vadim Zeitlin
275ab09ed7 Switch to a simpler wxString::Printf() implementation
Don't use std::index_sequence, as this has some advantages:

- This way doesn't require using another helper function, which is
  burdensome here and would be even more so if we had to do it for all
  the other wx vararg functions too.

- We don't need to require C++14 and can keep supporting even g++ 4.8.

The sole drawback is that we cannot pass the index of the argument to
wxArgNormalizer ctor any longer, which means that we can't validate it,
but this is addressed by validating the entire format string at once in
the new Validate() member function, which is also more efficient than
the old way for the format strings with more than one format specifier,
as they only need to be parsed once now, instead of having to do it for
each format specifier separately when GetArgumentType() is called.

This also means that we can't handle char arguments differently
depending on whether they are used with "%c" or "%d" format specifier.
This is a backwards-incompatible change, but should affect very few use
cases, so it seems to be worth breaking it to get the above benefits.
2022-11-23 02:47:41 +01:00
Vadim Zeitlin
e21b77cb14 Switch to using int for "%c" if there is no format string
So far this doesn't really change much, considering that the format
string is always specified for the functions for which it matters, but
it prepares for the upcoming commit which will change the handling of
"%c" for these functions too.
2022-11-23 02:44:50 +01:00
Vadim Zeitlin
2b40446f0e Specialize wxFormatStringSpecifier for more types
Prepare for using wxFormatStringSpecifier<> for all types, including
those already specializing wxArgNormalizer.

No real changes yet.
2022-11-23 02:44:50 +01:00
Vadim Zeitlin
6456ddac57 Reimplement wxString::Printf() as variadic template
This implementation uses std::index_sequence which is C++14-only, so
we'll need to increase the minimum C++ version requirements if we use
it.
2022-11-23 02:44:50 +01:00
Vadim Zeitlin
2c0c727f49 Remove wx own wxStringImpl implementation
Always use std::basic_string<> as wxStringImpl.

Closes #22883.
2022-11-17 00:40:50 +01:00
Vadim Zeitlin
c5f8cefe1e Remove another not really UTF-8 related FIXME comment
The question of which type should be used in the absence of the format
string still seems to be valid, but not really related to using (or not)
UTF-8.

Leave the comment, but remove the FIXME, as it almost certainly won't be
fixed (but hopefully all this code might get removed as part of #22880).

Also replace a leftover NULL with nullptr for consistency and to pacify
the code style check.
2022-10-28 21:17:15 +01:00
Vadim Zeitlin
68a05fd5b8 Don't mention ANSI build in wx/strvararg.h comments any longer
Also remove an "#else" branch which is never taken any more.

No real changes.
2022-10-28 21:17:15 +01:00
Vadim Zeitlin
4519d8e08a Remove wxUSE_UNICODE checks as they're always true now
Also remove all code guarded by "#if !wxUSE_UNICODE".
2022-10-27 19:43:30 +02:00
Vadim Zeitlin
4f4c5fcfdf Use nullptr instead of NULL in the code and documentation
This is a combination of running clang-tidy with modernize-use-nullptr
check for some ports (GTK, X11, OSX) and manual changes to the ports for
which it couldn't be used easily (MSW, DFB) and also manually updating
the docs.

Also replace NULL with null or nullptr in the comments as this is more
consistent with the use of nullptr in the code and makes it simpler to
grep for the remaining occurrences of NULL itself.

And also use null in the assert messages.

Only a few occurrences of "NULL" are still left in non-C files, mostly
corresponding to unclear comments or string output which it might not be
safe to change.
2022-10-18 01:25:25 +02:00
Vadim Zeitlin
a0ae0cd316 Use <type_traits> unconditionally
Don't use or even mention tr1/type_traits any more.
2022-10-11 00:45:30 +02:00
Vadim Zeitlin
0a387693c6 Use std::wstring unconditionally
Don't test for its existence in configure and CMake and don't use
wxStdWideString in the code.
2022-10-11 00:45:30 +02:00
Blake Madden
668a2186cd Fix comment typos in sources
No real changes.

Closes https://github.com/wxWidgets/wxWidgets/pull/2541
2021-10-03 17:07:44 +02:00
Vadim Zeitlin
8e2cac22ba Add support for std::string_view to wx vararg functions
Allow using wxPrintf() etc with std::string_view arguments when using
C++17.

This is inefficient but still more convenient than not being able to use
string_view at all.
2021-06-24 14:53:05 +01:00
Vadim Zeitlin
51cb0e53b1 Use wxMEMBER_DELETE instead of "Disabled" comment
No real changes, but this is more clear and should result in better
error messages.
2021-04-25 18:59:20 +02:00
Vadim Zeitlin
7f246330de Remove wrong template arguments from wxArgNormalized ctors
Ctor of a template class specialization shouldn't actually repeat the
specialized template arguments, as it was done in 65cbf40b7e (Add
wxNO_UNSAFE_WXSTRING_CONV2 macro, 2019-10-21), so remove them because
this doesn't compile with g++ 11, even though it (wrongly?) did with the
previous gcc versions.
2021-04-25 18:59:20 +02:00
Vadim Zeitlin
831979ead1 Suppress gcc -Wctor-dtor-privacy in wx/strvararg.h
Helper structs declared in this header intentionally define their ctor
as private, avoid gcc complaints about it.
2020-08-31 01:25:07 +02:00
Arrigo Marchiori
65cbf40b7e Add wxNO_UNSAFE_WXSTRING_CONV2 macro
The macro disallows implicit conversions between wxString and const
char*
2020-07-17 17:34:38 +02:00
Vadim Zeitlin
7969f3f81c Define wxHAS_NULLPTR_T if nullptr is supported
This is necessary because MSVS versions as old as 2010 support it, even
if they don't have full C++11 support and so don't define __cplusplus
appropriately.

Extract the existing check for nullptr from wx/strvararg.h to wx/defs.h
in order to allow reusing it.
2020-01-31 17:11:50 +01:00
Vadim Zeitlin
5a78b82673 Add support for passing nullptr to wx pseudo-vararg functions
Allow passing literal nullptr as an argument corresponding to "%p" in
the format string.

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

Closes #18355.
2019-03-09 01:14:31 +01:00
ARATA Mizuki
affbcfa6c4 Remove HAVE_PARTIAL_SPECIALIZATION and HAVE_TEMPLATE_OVERLOAD_RESOLUTION macros
See #17655.
2016-09-14 18:45:12 +09:00
Vadim Zeitlin
49b8d79c87 Remove (Open)Watcom support.
This compiler is not being developed since several years and almost certainly
can't be used to build the current wxWidgets sources anyhow, so remove all
support for it, including a lot of extremely ugly workarounds for its bugs
with template functions.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@76546 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2014-05-16 13:01:06 +00:00
Václav Slavík
c7972da951 Be more permissive when validating format string arguments.
Previously, the code would assert if the caller passed too many
arguments to wxPrintf() or other printf-like functions. But that can
happen legitimately in translations: in some languages such as Hebrew,
using "1" (i.e. "%d") in the singular feels unnatural and it's better to
use the word "one" and left the variadic argument unused.

Relax the check not to assert in this case. This is consistent with the
standard library and other implementations. Notice that gettext's msgfmt
doesn't complain about this case either in the specific case of singular
forms.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@76027 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2014-02-27 15:24:21 +00:00
Paul Cornett
1e35c3b915 Silence warnings in headers with MSC -W4
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@75014 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2013-10-16 16:45:53 +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
4d3845c073 Avoid using "do { ... } while ( wxFalse )" pseudo-loop.
This loop can't be optimized away by the compiler because wxFalse is an extern
variable which can't be known to be always false. Additionally, this creates
many false positives from Coverity as it assumes that the loop can be executed
more than once.

Define wxSTATEMENT_MACRO_BEGIN/END macros abstracting the exact solution used
and replace wxFalse with "(void)0, 0" for now as this seems to placate MSVC
(which warns about using a bare "0" as a condition) while still allowing the
loop to be completely optimized away.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@73101 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2012-12-02 23:48:36 +00:00
Vadim Zeitlin
715efa4e25 Allow passing wxLongLong values directly to wx pseudo-vararg functions.
Allow passing wxLongLong objects when a "%lld" format specifier (or
equivalent) is used just as we already do for wxString objects when "%s" is
used. This is more convenient and makes wxLongLong closes to the native type.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@67760 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2011-05-17 22:12:39 +00:00
Dimitri Schoolwerth
4c51a665c6 Fixed various typos.
Applied patch by snowleopard2 fixing a bunch of typos such as misspellings and double words in the documentation. Combined the patch with some local queued typos waiting to be committed as well as adding new typo fixes inspired by the patch.

Function names with American spelling were not changed nor was third-party code touched. The only code changes involve some changes in strings that are translated ("Can not" -> "Cannot").

Closes #13063 (again).

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@67280 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2011-03-22 14:17:38 +00:00
Vadim Zeitlin
f675b4f521 Fix harmless unused parameter warnings in wxDEBUG_LEVEL==0 build.
These warnings were harmless as they concerned the parameters used inside
wxASSERTs only but there were hundreds if not thousands of them in
wx/strvararg.h alone so all the rest of build output was completely lost in
them.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@65046 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2010-07-22 13:42:49 +00:00
Václav Slavík
3b12da351c Fix vararg type checking to accept ints for %c.
It's perfectly legitimate to format int values as %c, so don't assert in
this case.

Fixes #12192.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@64798 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2010-07-03 14:24:12 +00:00
Václav Slavík
5b4a88f4db Simply varargs type checking by adding subtypes to check mask.
Instead of always declaraing that a C++ type corresponds to either
Arg_String or Arg_Pointer, make Arg_String superset of Arg_Pointer.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@64797 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2010-07-03 14:24:06 +00:00
Václav Slavík
afc1f37c65 Fix printf arguments validation code for ANSI build.
char arguments weren't recognized as allowed variadic types. Unlike in
Unicode build, where chars are treated specially, they are primitive
types in ANSI build.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@64790 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2010-07-01 15:28:35 +00:00
Václav Slavík
227c030f98 Don't assume size_t is either int- or long-sized.
On 64bit Windows systems, sizeof(int)==sizeof(long)=4, but size_t is 8
bytes large.

Fixes #12179.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@64788 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2010-07-01 14:30:29 +00:00
Václav Slavík
c869479eb4 Compilation fix for compilers that don't have native wchar_t.
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@64716 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2010-06-24 11:25:49 +00:00
Václav Slavík
0f895b0cf5 Check wxPrintf etc. arguments types.
Implements checks similar to gcc's compile-time checks: verify that the
arguments are of correct types. This works partially at compile time
(e.g. passing an object as argument fails to compile) and partially at
runtime (assert if the specifier doesn't match the type).

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@64710 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2010-06-24 10:34:18 +00:00
Václav Slavík
2fe2d3de6b Add correct wxArgNormalizer code for signed char.
Signed char is distict type (see 3.9.1 [basic.fundamental] part of the
standard), covering just char and unsigned char is not enough.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@64709 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2010-06-24 10:34:11 +00:00
Václav Slavík
5412c6ad17 variadic macros need specializations for both wxCharBuffer and wxScopedCharBuffer (fixes #10651)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@59901 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2009-03-28 12:32:06 +00:00
Václav Slavík
de4983f323 split wxCharTypeBuffer<T> into wxScopedCharTypeBuffer<T> and wxCharTypeBuffer<T> -- the former is for transient data with validity limited to parent's lifetime, the latter is for permanent storage of string data (bug #9638)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@59887 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2009-03-27 15:33:55 +00:00
Vadim Zeitlin
c0c133e13b add wx-prefixed and semicolon-requiring versions of DECLARE_NO_{COPY,ASSIGN}_CLASS macros
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@58757 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2009-02-08 11:45:59 +00:00
Václav Slavík
e68a8744ee silence gcc warnings in "vararg" functions such as wxPrintf when compiling with -Wformat-security
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@58126 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2009-01-16 12:07:47 +00:00
Vadim Zeitlin
5c69ef61f3 fix some of icc 11.0 warnings and disable a few others
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@56792 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2008-11-16 14:24:13 +00:00
Vadim Zeitlin
5c33522fca replace wx_{const,static,reinterpret}_cast with their standard C++ equivalents
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@56644 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2008-11-02 02:39:52 +00:00
Václav Slavík
5431a79f1e optimize wxFormatStringArgumentFinder<T> for strings and make it work correctly for wxCharBuffer
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@54838 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2008-07-29 23:10:04 +00:00
Vadim Zeitlin
9183da066e no need to reenable VC warning 4251 now as it's globally disabled in wx/defs.h
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@50844 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2007-12-20 00:55:03 +00:00
Paul Cornett
9356b709aa allow copying wxFormatString for compiler-generated temporaries
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@48884 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2007-09-21 16:04:24 +00:00
Václav Slavík
04e7692af1 VC6 compilation fix for _WX_VARARG_FORMAT_STRING macro
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@48344 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2007-08-22 20:07:11 +00:00
Václav Slavík
1f5df26884 Watcom compilation fix
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@48341 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2007-08-22 18:15:23 +00:00