]> git.saurik.com Git - wxWidgets.git/blob - interface/wx/string.h
Define __VISUALC__ for ICC under Windows again.
[wxWidgets.git] / interface / wx / string.h
1 /////////////////////////////////////////////////////////////////////////////
2 // Name: string.h
3 // Purpose: interface of wxStringBuffer, wxString
4 // Author: wxWidgets team
5 // Licence: wxWindows licence
6 /////////////////////////////////////////////////////////////////////////////
7
8
9 /**
10 @class wxString
11
12 String class for passing textual data to or receiving it from wxWidgets.
13
14 @note
15 While the use of wxString is unavoidable in wxWidgets program, you are
16 encouraged to use the standard string classes @c std::string or @c
17 std::wstring in your applications and convert them to and from wxString
18 only when interacting with wxWidgets.
19
20
21 wxString is a class representing a Unicode character string but with
22 methods taking or returning both @c wchar_t wide characters and @c wchar_t*
23 wide strings and traditional @c char characters and @c char* strings. The
24 dual nature of wxString API makes it simple to use in all cases and,
25 importantly, allows the code written for either ANSI or Unicode builds of
26 the previous wxWidgets versions to compile and work correctly with the
27 single unified Unicode build of wxWidgets 3.0. It is also mostly
28 transparent when using wxString with the few exceptions described below.
29
30
31 @section string_api API overview
32
33 wxString tries to be similar to both @c std::string and @c std::wstring and
34 can mostly be used as either class. It provides practically all of the
35 methods of these classes, which behave exactly the same as in the standard
36 C++, and so are not documented here (please see any standard library
37 documentation, for example http://en.cppreference.com/w/cpp/string for more
38 details).
39
40 In addition to these standard methods, wxString adds functions dealing with
41 the conversions between different string encodings, described below, as
42 well as many extra helpers such as functions for formatted output
43 (Printf(), Format(), ...), case conversion (MakeUpper(), Capitalize(), ...)
44 and various others (Trim(), StartsWith(), Matches(), ...). All of the
45 non-standard methods follow wxWidgets "CamelCase" naming convention and are
46 documented here.
47
48 Notice that some wxString methods exist in several versions for
49 compatibility reasons. For example all of length(), Length() and Len() are
50 provided. In such cases it is recommended to use the standard string-like
51 method, i.e. length() in this case.
52
53
54 @section string_conv Converting to and from wxString
55
56 wxString can be created from:
57 - ASCII string guaranteed to contain only 7 bit characters using
58 wxString::FromAscii().
59 - Narrow @c char* string in the current locale encoding using implicit
60 wxString::wxString(const char*) constructor.
61 - Narrow @c char* string in UTF-8 encoding using wxString::FromUTF8().
62 - Narrow @c char* string in the given encoding using
63 wxString::wxString(const char*, const wxMBConv&) constructor passing a
64 wxCSConv corresponding to the encoding as the second argument.
65 - Standard @c std::string using implicit wxString::wxString(const
66 std::string&) constructor. Notice that this constructor supposes that
67 the string contains data in the current locale encoding, use FromUTF8()
68 or the constructor taking wxMBConv if this is not the case.
69 - Wide @c wchar_t* string using implicit wxString::wxString(const
70 wchar_t*) constructor.
71 - Standard @c std::wstring using implicit wxString::wxString(const
72 std::wstring&) constructor.
73
74 Notice that many of the constructors are implicit, meaning that you don't
75 even need to write them at all to pass the existing string to some
76 wxWidgets function taking a wxString.
77
78 Similarly, wxString can be converted to:
79 - ASCII string using wxString::ToAscii(). This is a potentially
80 destructive operation as all non-ASCII string characters are replaced
81 with a placeholder character.
82 - String in the current locale encoding implicitly or using c_str() or
83 mb_str() methods. This is a potentially destructive operation as an @e
84 empty string is returned if the conversion fails.
85 - String in UTF-8 encoding using wxString::utf8_str().
86 - String in any given encoding using mb_str() with the appropriate
87 wxMBConv object. This is also a potentially destructive operation.
88 - Standard @c std::string using wxString::ToStdString(). The contents
89 of the returned string use the current locale encoding, so this
90 conversion is potentially destructive as well.
91 - Wide C string using wxString::wc_str().
92 - Standard @c std::wstring using wxString::ToStdWstring().
93
94 @note If you built wxWidgets with @c wxUSE_STL set to 1, the implicit
95 conversions to both narrow and wide C strings are disabled and replaced
96 with implicit conversions to @c std::string and @c std::wstring.
97
98 Please notice that the conversions marked as "potentially destructive"
99 above can result in loss of data if their result is not checked, so you
100 need to verify that converting the contents of a non-empty Unicode string
101 to a non-UTF-8 multibyte encoding results in non-empty string. The simplest
102 and best way to ensure that the conversion never fails is to always use
103 UTF-8.
104
105
106 @section string_gotchas Traps for the unwary
107
108 As mentioned above, wxString tries to be compatible with both narrow and
109 wide standard string classes and mostly does it transparently, but there
110 are some exceptions.
111
112 @subsection string_gotchas_element String element access
113
114 Some problems are caused by wxString::operator[]() which returns an object
115 of a special proxy class allowing to assign either a simple @c char or a @c
116 wchar_t to the given index. Because of this, the return type of this
117 operator is neither @c char nor @c wchar_t nor a reference to one of these
118 types but wxUniCharRef which is not a primitive type and hence can't be
119 used in the @c switch statement. So the following code does @e not compile
120 @code
121 wxString s(...);
122 switch ( s[n] ) {
123 case 'A':
124 ...
125 break;
126 }
127 @endcode
128 and you need to use
129 @code
130 switch ( s[n].GetValue() ) {
131 ...
132 }
133 @endcode
134 instead. Alternatively, you can use an explicit cast:
135 @code
136 switch ( static_cast<char>(s[n]) ) {
137 ...
138 }
139 @endcode
140 but notice that this will result in an assert failure if the character at
141 the given position is not representable as a single @c char in the current
142 encoding, so you may want to cast to @c int instead if non-ASCII values can
143 be used.
144
145 Another consequence of this unusual return type arises when it is used with
146 template deduction or C++11 @c auto keyword. Unlike with the normal
147 references which are deduced to be of the referenced type, the deduced type
148 for wxUniCharRef is wxUniCharRef itself. This results in potentially
149 unexpected behaviour, for example:
150 @code
151 wxString s("abc");
152 auto c = s[0];
153 c = 'x'; // Modifies the string!
154 wxASSERT( s == "xbc" );
155 @endcode
156 Due to this, either explicitly specify the variable type:
157 @code
158 int c = s[0];
159 c = 'x'; // Doesn't modify the string any more.
160 wxASSERT( s == "abc" );
161 @endcode
162 or explicitly convert the return value:
163 @code
164 auto c = s[0].GetValue();
165 c = 'x'; // Doesn't modify the string neither.
166 wxASSERT( s == "abc" );
167 @endcode
168
169
170 @subsection string_gotchas_conv Conversion to C string
171
172 A different class of problems happens due to the dual nature of the return
173 value of wxString::c_str() method, which is also used for implicit
174 conversions. The result of calls to this method is convertible to either
175 narrow @c char* string or wide @c wchar_t* string and so, again, has
176 neither the former nor the latter type. Usually, the correct type will be
177 chosen depending on how you use the result but sometimes the compiler can't
178 choose it because of an ambiguity, e.g.:
179 @code
180 // Some non-wxWidgets functions existing for both narrow and wide
181 // strings:
182 void dump_text(const char* text); // Version (1)
183 void dump_text(const wchar_t* text); // Version (2)
184
185 wxString s(...);
186 dump_text(s); // ERROR: ambiguity.
187 dump_text(s.c_str()); // ERROR: still ambiguous.
188 @endcode
189 In this case you need to explicitly convert to the type that you need to
190 use or use a different, non-ambiguous, conversion function (which is
191 usually the best choice):
192 @code
193 dump_text(static_cast<const char*>(s)); // OK, calls (1)
194 dump_text(static_cast<const wchar_t*>(s.c_str())); // OK, calls (2)
195 dump_text(s.mb_str()); // OK, calls (1)
196 dump_text(s.wc_str()); // OK, calls (2)
197 dump_text(s.wx_str()); // OK, calls ???
198 @endcode
199
200 @subsection string_vararg Using wxString with vararg functions
201
202 A special subclass of the problems arising due to the polymorphic nature of
203 wxString::c_str() result type happens when using functions taking an
204 arbitrary number of arguments, such as the standard @c printf(). Due to the
205 rules of the C++ language, the types for the "variable" arguments of such
206 functions are not specified and hence the compiler cannot convert wxString
207 objects, or the objects returned by wxString::c_str(), to these unknown
208 types automatically. Hence neither wxString objects nor the results of most
209 of the conversion functions can be passed as vararg arguments:
210 @code
211 // ALL EXAMPLES HERE DO NOT WORK, DO NOT USE THEM!
212 printf("Don't do this: %s", s);
213 printf("Don't do that: %s", s.c_str());
214 printf("Nor even this: %s", s.mb_str());
215 wprintf("And even not always this: %s", s.wc_str());
216 @endcode
217 Instead you need to either explicitly cast to the needed type:
218 @code
219 // These examples work but are not the best solution, see below.
220 printf("You can do this: %s", static_cast<const char*>(s));
221 printf("Or this: %s", static_cast<const char*>(s.c_str()));
222 printf("And this: %s", static_cast<const char*>(s.mb_str()));
223 wprintf("Or this: %s", static_cast<const wchar_t*>(s.wc_str()));
224 @endcode
225 But a better solution is to use wxWidgets-provided functions, if possible,
226 as is the case for @c printf family of functions:
227 @code
228 // This is the recommended way.
229 wxPrintf("You can do just this: %s", s);
230 wxPrintf("And this (but it is redundant): %s", s.c_str());
231 wxPrintf("And this (not using Unicode): %s", s.mb_str());
232 wxPrintf("And this (always Unicode): %s", s.wc_str());
233 @endcode
234 Notice that wxPrintf() replaces both @c printf() and @c wprintf() and
235 accepts wxString objects, results of c_str() calls but also @c char* and
236 @c wchar_t* strings directly.
237
238 wxWidgets provides wx-prefixed equivalents to all the standard vararg
239 functions and a few more, notably wxString::Format(), wxLogMessage(),
240 wxLogError() and other log functions. But if you can't use one of those
241 functions and need to pass wxString objects to non-wx vararg functions, you
242 need to use the explicit casts as explained above.
243
244
245 @section string_performance Performance characteristics
246
247 wxString uses @c std::basic_string internally to store its content (unless
248 this is not supported by the compiler or disabled specifically when
249 building wxWidgets) and it therefore inherits many features from @c
250 std::basic_string. In particular, most modern implementations of @c
251 std::basic_string are thread-safe and don't use reference counting (making
252 copying large strings potentially expensive) and so wxString has the same
253 characteristics.
254
255 By default, wxString uses @c std::basic_string specialized for the
256 platform-dependent @c wchar_t type, meaning that it is not memory-efficient
257 for ASCII strings, especially under Unix platforms where every ASCII
258 character, normally fitting in a byte, is represented by a 4 byte @c
259 wchar_t.
260
261 It is possible to build wxWidgets with @c wxUSE_UNICODE_UTF8 set to 1 in
262 which case an UTF-8-encoded string representation is stored in @c
263 std::basic_string specialized for @c char, i.e. the usual @c std::string.
264 In this case the memory efficiency problem mentioned above doesn't arise
265 but run-time performance of many wxString methods changes dramatically, in
266 particular accessing the N-th character of the string becomes an operation
267 taking O(N) time instead of O(1), i.e. constant, time by default. Thus, if
268 you do use this so called UTF-8 build, you should avoid using indices to
269 access the strings whenever possible and use the iterators instead. As an
270 example, traversing the string using iterators is an O(N), where N is the
271 string length, operation in both the normal ("wchar_t") and UTF-8 builds
272 but doing it using indices becomes O(N^2) in UTF-8 case meaning that simply
273 checking every character of a reasonably long (e.g. a couple of millions
274 elements) string can take an unreasonably long time.
275
276 However, if you do use iterators, UTF-8 build can be a better choice than
277 the default build, especially for the memory-constrained embedded systems.
278 Notice also that GTK+ and DirectFB use UTF-8 internally, so using this
279 build not only saves memory for ASCII strings but also avoids conversions
280 between wxWidgets and the underlying toolkit.
281
282
283 @section string_index Index of the member groups
284
285 Links for quick access to the various categories of wxString functions:
286 - @ref_member_group{ctor, Constructors and assignment operators}
287 - @ref_member_group{length, Length functions}
288 - @ref_member_group{ch_access, Character access functions}
289 - @ref_member_group{conv, Conversions functions}
290 - @ref_member_group{concat, Concatenation functions}
291 - @ref_member_group{cmp, Comparison functions}
292 - @ref_member_group{substring, Substring extraction functions}
293 - @ref_member_group{caseconv, Case conversion functions}
294 - @ref_member_group{search, Searching and replacing functions}
295 - @ref_member_group{numconv, Conversion to numbers functions}
296 - @ref_member_group{fmt, Formatting and printing functions}
297 - @ref_member_group{mem, Memory management functions}
298 - @ref_member_group{misc, Miscellaneous functions}
299 - @ref_member_group{iter, Iterator interface functions}
300 - @ref_member_group{stl, STL interface functions}
301
302
303 @library{wxbase}
304 @category{data}
305
306 @stdobjects
307 ::wxEmptyString
308
309 @see @ref overview_string, @ref overview_unicode,
310 @ref group_funcmacro_string "String-related functions", wxUString,
311 wxCharBuffer, wxUniChar, wxStringTokenizer, wxStringBuffer, wxStringBufferLength
312 */
313 class wxString
314 {
315 public:
316 /**
317 @name Standard types
318
319 Types used with wxString.
320 */
321 //@{
322 typedef wxUniChar value_type;
323 typedef wxUniChar char_type;
324 typedef wxUniCharRef reference;
325 typedef wxChar* pointer;
326 typedef const wxChar* const_pointer;
327 typedef size_t size_type;
328 typedef wxUniChar const_reference;
329 //@}
330
331
332 /**
333 @member_group_name{ctor, Constructors and assignment operators}
334
335 A string may be constructed either from a C string, (some number of copies of)
336 a single character or a wide (Unicode) string. For all constructors (except the
337 default which creates an empty string) there is also a corresponding assignment
338 operator.
339
340 See also the assign() STL-like function.
341 */
342 //@{
343
344 /**
345 Default constructor
346 */
347 wxString();
348
349 /**
350 Creates a string from another string.
351 Just increases the ref count by 1.
352 */
353 wxString(const wxString& stringSrc);
354
355 /**
356 Construct a string consisting of @a nRepeat copies of ch.
357 */
358 wxString(wxUniChar ch, size_t nRepeat = 1);
359
360 /**
361 Construct a string consisting of @a nRepeat copies of ch.
362 */
363 wxString(wxUniCharRef ch, size_t nRepeat = 1);
364
365 /**
366 Construct a string consisting of @a nRepeat copies of ch
367 converted to Unicode using the current locale encoding.
368 */
369 wxString(char ch, size_t nRepeat = 1);
370
371 /**
372 Construct a string consisting of @a nRepeat copies of ch.
373 */
374 wxString(wchar_t ch, size_t nRepeat = 1);
375
376 /**
377 Constructs a string from the string literal @a psz using
378 the current locale encoding to convert it to Unicode (wxConvLibc).
379 */
380 wxString(const char *psz);
381
382 /**
383 Constructs a string from the string literal @a psz using
384 @a conv to convert it Unicode.
385 */
386 wxString(const char *psz, const wxMBConv& conv);
387
388 /**
389 Constructs a string from the first @a nLength character of the string literal @a psz using
390 the current locale encoding to convert it to Unicode (wxConvLibc).
391 */
392 wxString(const char *psz, size_t nLength);
393
394 /**
395 Constructs a string from the first @a nLength character of the string literal @a psz using
396 @a conv to convert it Unicode.
397 */
398 wxString(const char *psz, const wxMBConv& conv, size_t nLength);
399
400 /**
401 Constructs a string from the string literal @a pwz.
402 */
403 wxString(const wchar_t *pwz);
404
405 /**
406 Constructs a string from the first @a nLength characters of the string literal @a pwz.
407 */
408 wxString(const wchar_t *pwz, size_t nLength);
409
410 /**
411 Constructs a string from @a buf using the using the current locale
412 encoding to convert it to Unicode.
413 */
414 wxString(const wxCharBuffer& buf);
415
416 /**
417 Constructs a string from @a buf.
418 */
419 wxString(const wxWCharBuffer& buf);
420
421 /**
422 Constructs a string from @a str using the using the current locale encoding
423 to convert it to Unicode (wxConvLibc).
424
425 @see ToStdString()
426 */
427 wxString(const std::string& str);
428
429 /**
430 Constructs a string from @a str.
431
432 @see ToStdWstring()
433 */
434 wxString(const std::wstring& str);
435
436 /**
437 String destructor.
438
439 Note that this is not virtual, so wxString must not be inherited from.
440 */
441 ~wxString();
442
443 /**
444 Assignment: see the relative wxString constructor.
445 */
446 wxString operator =(const wxString& str);
447
448 /**
449 Assignment: see the relative wxString constructor.
450 */
451 wxString operator =(wxUniChar c);
452
453 //@}
454
455
456
457 /**
458 @member_group_name{length, String length}
459
460 These functions return the string length and/or check whether the string
461 is empty.
462
463 See also the length(), size() or empty() STL-like functions.
464 */
465 //@{
466
467
468 /**
469 Returns the length of the string.
470 */
471 size_t Len() const;
472
473 /**
474 Returns the length of the string (same as Len).
475 This is a wxWidgets 1.xx compatibility function; you should not use it in new
476 code.
477 */
478 size_t Length() const;
479
480 /**
481 Returns @true if the string is empty.
482 */
483 bool IsEmpty() const;
484
485 /**
486 Returns @true if the string is empty (same as wxString::IsEmpty).
487 This is a wxWidgets 1.xx compatibility function; you should not use it in new
488 code.
489 */
490 bool IsNull() const;
491
492 /**
493 Empty string is @false, so !string will only return @true if the
494 string is empty.
495
496 @see IsEmpty().
497 */
498 bool operator!() const;
499
500 //@}
501
502
503
504 /**
505 @member_group_name{ch_access, Character access}
506
507 Many functions below take a character index in the string.
508 As with C strings and arrays, the indices start from 0, so the first character
509 of a string is string[0]. An attempt to access a character beyond the end of the
510 string (which may even be 0 if the string is empty) will provoke an assert
511 failure in @ref overview_debugging "debug builds", but no checks are
512 done in release builds.
513 */
514 //@{
515
516 /**
517 Returns the character at position @a n (read-only).
518 */
519 wxUniChar GetChar(size_t n) const;
520
521 /**
522 wxWidgets compatibility conversion. Same as c_str().
523 */
524 const wxCStrData GetData() const;
525
526 /**
527 Returns a reference to the character at position @a n.
528 */
529 wxUniCharRef GetWritableChar(size_t n);
530
531 /**
532 Returns a writable buffer of at least @a len bytes.
533
534 It returns a pointer to a new memory block, and the existing data will not be copied.
535 Call UngetWriteBuf() as soon as possible to put the string back into a reasonable state.
536
537 This method is deprecated, please use wxStringBuffer or wxStringBufferLength instead.
538 */
539 wxStringCharType* GetWriteBuf(size_t len);
540
541 /**
542 Puts the string back into a reasonable state (in which it can be used
543 normally), after GetWriteBuf() was called.
544
545 The version of the function without the @a len parameter will calculate the
546 new string length itself assuming that the string is terminated by the first
547 @c NUL character in it while the second one will use the specified length
548 and thus is the only version which should be used with the strings with
549 embedded @c NULs (it is also slightly more efficient as @c strlen()
550 doesn't have to be called).
551
552 This method is deprecated, please use wxStringBuffer or wxStringBufferLength instead.
553 */
554 void UngetWriteBuf();
555
556 /**
557 @overload
558 */
559 void UngetWriteBuf(size_t len);
560
561 /**
562 Sets the character at position @e n.
563 */
564 void SetChar(size_t n, wxUniChar ch);
565
566 /**
567 Returns the last character.
568
569 This is a wxWidgets 1.xx compatibility function;
570 you should not use it in new code.
571 */
572 wxUniChar Last() const;
573
574 /**
575 Returns a reference to the last character (writable).
576
577 This is a wxWidgets 1.xx compatibility function;
578 you should not use it in new code.
579 */
580 wxUniCharRef Last();
581
582 /**
583 Returns the @a i-th character of the string.
584 */
585 wxUniChar operator [](size_t i) const;
586
587 /**
588 Returns a writable reference to the @a i-th character of the string.
589 */
590 wxUniCharRef operator [](size_t i);
591
592 //@}
593
594
595 /**
596 @member_group_name{conv, Conversions}
597
598 This section contains both implicit and explicit conversions to C style
599 strings. Although implicit conversion is quite convenient, you are advised
600 to use wc_str() for the sake of clarity.
601 */
602 //@{
603
604 /**
605 Returns a lightweight intermediate class which is in turn implicitly
606 convertible to both @c const @c char* and to @c const @c wchar_t*.
607 Given this ambiguity it is mostly better to use wc_str(), mb_str() or
608 utf8_str() instead.
609
610 Please see the @ref overview_unicode for more information about it.
611
612 Note that the returned value is not convertible to @c char* or
613 @c wchar_t*, use char_str() or wchar_str() if you need to pass
614 string value to a function expecting non-const pointer.
615
616 @see wc_str(), utf8_str(), c_str(), mb_str(), fn_str()
617 */
618 wxCStrData c_str() const;
619
620 /**
621 Returns an object with string data that is implicitly convertible to
622 @c char* pointer. Note that any change to the returned buffer is lost and so
623 this function is only usable for passing strings to legacy libraries that
624 don't have const-correct API. Use wxStringBuffer if you want to modify
625 the string.
626
627 @see c_str()
628 */
629 wxWritableCharBuffer char_str(const wxMBConv& conv = wxConvLibc) const;
630
631 /**
632 Returns buffer of the specified type containing the string data.
633
634 This method is only useful in template code, otherwise you should
635 directly call mb_str() or wc_str() if you need to retrieve a narrow or
636 wide string from this wxString. The template parameter @a t should be
637 either @c char or @c wchar_t.
638
639 Notice that retrieving a char buffer in UTF-8 build will return the
640 internal string representation in UTF-8 while in wchar_t build the char
641 buffer will contain the conversion of the string to the encoding of the
642 current locale (and so can fail).
643
644 @param len
645 If non-@NULL, filled with the length of the returned buffer.
646
647 @return
648 buffer containing the string contents in the specified type,
649 notice that it may be @NULL if the conversion failed (e.g. Unicode
650 string couldn't be converted to the current encoding when @a T is
651 @c char).
652 */
653 template <typename T>
654 wxCharTypeBuffer<T> tchar_str(size_t *len = NULL) const;
655
656 /**
657 Returns a string representation suitable for passing to OS' functions
658 for file handling.
659 */
660 const wchar_t* fn_str() const;
661
662 /**
663 @overload
664 */
665 const char* fn_str() const;
666
667 /**
668 @overload
669 */
670 const wxCharBuffer fn_str() const;
671
672 /**
673 Returns the multibyte (C string) representation of the string
674 using @e conv's wxMBConv::cWC2MB method and returns wxCharBuffer.
675
676 @see wc_str(), utf8_str(), c_str(), wxMBConv
677 */
678 const wxCharBuffer mb_str(const wxMBConv& conv = wxConvLibc) const;
679
680 /**
681 Converts the strings contents to UTF-8 and returns it either as a
682 temporary wxCharBuffer object or as a pointer to the internal
683 string contents in UTF-8 build.
684
685 @see wc_str(), c_str(), mb_str()
686 */
687 const wxScopedCharBuffer utf8_str() const;
688
689 /**
690 Converts the strings contents to the wide character representation
691 and returns it as a temporary wxWCharBuffer object (Unix and OS X)
692 or returns a pointer to the internal string contents in wide character
693 mode (Windows).
694
695 The macro wxWX2WCbuf is defined as the correct return type (without const).
696
697 @see utf8_str(), c_str(), mb_str(), fn_str(), wchar_str()
698 */
699 const wchar_t* wc_str() const;
700
701 /**
702 @overload
703 */
704 const wxWCharBuffer wc_str() const;
705
706 /**
707 Returns an object with string data that is implicitly convertible to
708 @c char* pointer. Note that changes to the returned buffer may or may
709 not be lost (depending on the build) and so this function is only usable for
710 passing strings to legacy libraries that don't have const-correct API. Use
711 wxStringBuffer if you want to modify the string.
712
713 @see mb_str(), wc_str(), fn_str(), c_str(), char_str()
714 */
715 wxWritableWCharBuffer wchar_str() const;
716
717 /**
718 Explicit conversion to C string in the internal representation (either
719 wchar_t* or UTF-8-encoded char*, depending on the build).
720 */
721 const wxStringCharType *wx_str() const;
722
723 /**
724 Converts the string to an 8-bit string in ISO-8859-1 encoding in the
725 form of a wxCharBuffer (Unicode builds only).
726
727 This is a convenience method useful when storing binary data in
728 wxString. It should be used @em only for this purpose. It is only valid
729 to call this method on strings created using From8BitData().
730
731 @since 2.8.4
732
733 @see wxString::From8BitData()
734 */
735 const wxScopedCharBuffer To8BitData() const;
736
737 /**
738 Converts the string to an ASCII, 7-bit string in the form of
739 a wxCharBuffer (Unicode builds only) or a C string (ANSI builds).
740
741 Note that this conversion is only lossless if the string contains only
742 ASCII characters as all the non-ASCII ones are replaced with the @c '_'
743 (underscore) character.
744
745 Use mb_str() or utf8_str() to convert to other encodings.
746 */
747 const char* ToAscii() const;
748
749 /**
750 @overload
751 */
752 const wxCharBuffer ToAscii() const;
753
754 /**
755 Return the string as an std::string in current locale encoding.
756
757 Note that if the conversion of (Unicode) string contents to the current
758 locale fails, the return string will be empty. Be sure to check for
759 this to avoid silent data loss.
760
761 Instead of using this function it's also possible to write
762 @code
763 std::string s;
764 wxString wxs;
765 ...
766 s = std::string(wxs);
767 @endcode
768 but using ToStdString() may make the code more clear.
769
770 @since 2.9.1
771 */
772 std::string ToStdString() const;
773
774 /**
775 Return the string as an std::wstring.
776
777 Unlike ToStdString(), there is no danger of data loss when using this
778 function.
779
780 @since 2.9.1
781 */
782 std::wstring ToStdWstring() const;
783
784 /**
785 Same as utf8_str().
786 */
787 const wxScopedCharBuffer ToUTF8() const;
788
789 //@}
790
791
792 /**
793 @member_group_name{concat, Concatenation}
794
795 Almost anything may be concatenated (appended to) with a string!
796
797 Note that the various operator<<() overloads work as C++ stream insertion
798 operators. They insert the given value into the string.
799 Precision and format cannot be set using them. Use Printf() instead.
800
801 See also the insert() and append() STL-like functions.
802 */
803 //@{
804
805 /**
806 Appends the string literal @a psz.
807 */
808 wxString& Append(const char* psz);
809
810 /**
811 Appends the wide string literal @a pwz.
812 */
813 wxString& Append(const wchar_t* pwz);
814
815 /**
816 Appends the string literal @a psz with max length @a nLen.
817 */
818 wxString& Append(const char* psz, size_t nLen);
819
820 /**
821 Appends the wide string literal @a psz with max length @a nLen.
822 */
823 wxString& Append(const wchar_t* pwz, size_t nLen);
824
825 /**
826 Appends the string @a s.
827 */
828 wxString& Append(const wxString& s);
829
830 /**
831 Appends the character @a ch @a count times.
832 */
833 wxString &Append(wxUniChar ch, size_t count = 1u);
834
835 /**
836 Prepends @a str to this string, returning a reference to this string.
837 */
838 wxString& Prepend(const wxString& str);
839
840 /**
841 Concatenation: returns a new string equal to the concatenation of the operands.
842 */
843 wxString operator +(const wxString& x, const wxString& y);
844
845 /**
846 @overload
847 */
848 wxString operator +(const wxString& x, wxUniChar y);
849
850 wxString& operator<<(const wxString& s);
851 wxString& operator<<(const char* psz);
852 wxString& operator<<(const wchar_t* pwz);
853 wxString& operator<<(const wxCStrData& psz);
854 wxString& operator<<(char ch);
855 wxString& operator<<(unsigned char ch);
856 wxString& operator<<(wchar_t ch);
857 wxString& operator<<(const wxCharBuffer& s);
858 wxString& operator<<(const wxWCharBuffer& s);
859 wxString& operator<<(wxUniChar ch);
860 wxString& operator<<(wxUniCharRef ch);
861 wxString& operator<<(unsigned int ui);
862 wxString& operator<<(long l);
863 wxString& operator<<(unsigned long ul);
864 wxString& operator<<(wxLongLong_t ll);
865 wxString& operator<<(wxULongLong_t ul);
866 wxString& operator<<(float f);
867 wxString& operator<<(double d);
868
869 /**
870 Concatenation in place: the argument is appended to the string.
871 */
872 void operator +=(const wxString& str);
873
874 /**
875 @overload
876 */
877 void operator +=(wxUniChar c);
878
879 //@}
880
881
882 /**
883 @member_group_name{cmp, Comparison}
884
885 The default comparison function Cmp() is case-sensitive and so is the default
886 version of IsSameAs(). For case insensitive comparisons you should use CmpNoCase()
887 or give a second parameter to IsSameAs(). This last function is maybe more
888 convenient if only equality of the strings matters because it returns a boolean
889 @true value if the strings are the same and not 0 (which is usually @false
890 in C) as Cmp() does.
891
892 Matches() is a poor man's regular expression matcher: it only understands
893 '*' and '?' metacharacters in the sense of DOS command line interpreter.
894
895 StartsWith() is helpful when parsing a line of text which should start
896 with some predefined prefix and is more efficient than doing direct string
897 comparison as you would also have to precalculate the length of the prefix.
898
899 See also the compare() STL-like function.
900 */
901 //@{
902
903 /**
904 Case-sensitive comparison.
905 Returns a positive value if the string is greater than the argument,
906 zero if it is equal to it or a negative value if it is less than the
907 argument (same semantics as the standard @c strcmp() function).
908
909 @see CmpNoCase(), IsSameAs().
910 */
911 int Cmp(const wxString& s) const;
912
913 /**
914 Case-insensitive comparison.
915 Returns a positive value if the string is greater than the argument,
916 zero if it is equal to it or a negative value if it is less than the
917 argument (same semantics as the standard @c strcmp() function).
918
919 @see Cmp(), IsSameAs().
920 */
921 int CmpNoCase(const wxString& s) const;
922
923 /**
924 Test whether the string is equal to another string @a s.
925
926 The test is case-sensitive if @a caseSensitive is @true (default) or not if it is
927 @false.
928
929 @return @true if the string is equal to the other one, @false otherwise.
930
931 @see Cmp(), CmpNoCase()
932 */
933 bool IsSameAs(const wxString& s, bool caseSensitive = true) const;
934
935 /**
936 Test whether the string is equal to the single character @a ch.
937
938 The test is case-sensitive if @a caseSensitive is @true (default) or not if it is
939 @false.
940
941 @return @true if the string is equal to this character, @false otherwise.
942
943 @see Cmp(), CmpNoCase()
944 */
945 bool IsSameAs(wxUniChar ch, bool caseSensitive = true) const;
946
947 /**
948 Returns @true if the string contents matches a mask containing '*' and '?'.
949 */
950 bool Matches(const wxString& mask) const;
951
952 /**
953 This function can be used to test if the string starts with the specified
954 @a prefix.
955
956 If it does, the function will return @true and put the rest of the string
957 (i.e. after the prefix) into @a rest string if it is not @NULL.
958 Otherwise, the function returns @false and doesn't modify the @a rest.
959 */
960 bool StartsWith(const wxString& prefix, wxString *rest = NULL) const;
961
962 /**
963 This function can be used to test if the string ends with the specified
964 @e suffix. If it does, the function will return @true and put the
965 beginning of the string before the suffix into @e rest string if it is not
966 @NULL. Otherwise, the function returns @false and doesn't
967 modify the @e rest.
968 */
969 bool EndsWith(const wxString& suffix, wxString *rest = NULL) const;
970
971 //@}
972
973
974 /**
975 @member_group_name{substring, Substring extraction}
976
977 These functions allow you to extract a substring from the string. The
978 original string is not modified and the function returns the extracted
979 substring.
980
981 See also the at() and the substr() STL-like functions.
982 */
983
984 /**
985 Returns a substring starting at @e first, with length @e count, or the rest of
986 the string if @a count is the default value.
987 */
988 wxString Mid(size_t first, size_t nCount = wxString::npos) const;
989
990 /**
991 Returns the part of the string between the indices @a from and @a to
992 inclusive.
993
994 This is a wxWidgets 1.xx compatibility function, use Mid()
995 instead (but note that parameters have different meaning).
996 */
997 wxString SubString(size_t from, size_t to) const;
998
999 /**
1000 Same as Mid() (substring extraction).
1001 */
1002 wxString operator()(size_t start, size_t len) const;
1003
1004 /**
1005 Returns the first @a count characters of the string.
1006 */
1007 wxString Left(size_t count) const;
1008
1009 /**
1010 Returns the last @a count characters.
1011 */
1012 wxString Right(size_t count) const;
1013
1014 /**
1015 Gets all the characters after the first occurrence of @e ch.
1016 Returns the empty string if @e ch is not found.
1017 */
1018 wxString AfterFirst(wxUniChar ch) const;
1019
1020 /**
1021 Gets all the characters after the last occurrence of @e ch.
1022 Returns the whole string if @e ch is not found.
1023 */
1024 wxString AfterLast(wxUniChar ch) const;
1025
1026 /**
1027 Gets all characters before the first occurrence of @e ch.
1028 Returns the whole string if @a ch is not found.
1029
1030 @param ch The character to look for.
1031 @param rest Filled with the part of the string following the first
1032 occurrence of @a ch or cleared if it was not found. The same string
1033 is returned by AfterFirst() but it is more efficient to use this
1034 output parameter if both the "before" and "after" parts are needed
1035 than calling both functions one after the other. This parameter is
1036 available in wxWidgets version 2.9.2 and later only.
1037 @return Part of the string before the first occurrence of @a ch.
1038 */
1039 wxString BeforeFirst(wxUniChar ch, wxString *rest = NULL) const;
1040
1041 /**
1042 Gets all characters before the last occurrence of @e ch.
1043 Returns the empty string if @a ch is not found.
1044
1045 @param ch The character to look for.
1046 @param rest Filled with the part of the string following the last
1047 occurrence of @a ch or the copy of this string if it was not found.
1048 The same string is returned by AfterLast() but it is more efficient
1049 to use this output parameter if both the "before" and "after" parts
1050 are needed than calling both functions one after the other. This
1051 parameter is available in wxWidgets version 2.9.2 and later only.
1052 @return Part of the string before the last occurrence of @a ch.
1053 */
1054 wxString BeforeLast(wxUniChar ch, wxString *rest = NULL) const;
1055
1056 //@}
1057
1058
1059 /**
1060 @member_group_name{caseconv, Case conversion}
1061
1062 The MakeXXX() variants modify the string in place, while the other functions
1063 return a new string which contains the original text converted to the upper or
1064 lower case and leave the original string unchanged.
1065 */
1066 //@{
1067
1068 /**
1069 Return the copy of the string with the first string character in the
1070 upper case and the subsequent ones in the lower case.
1071
1072 @since 2.9.0
1073
1074 @see MakeCapitalized()
1075 */
1076 wxString Capitalize() const;
1077
1078 /**
1079 Returns this string converted to the lower case.
1080
1081 @see MakeLower()
1082 */
1083 wxString Lower() const;
1084
1085 /**
1086 Same as MakeLower.
1087 This is a wxWidgets 1.xx compatibility function; you should not use it in new
1088 code.
1089 */
1090 void LowerCase();
1091
1092 /**
1093 Converts the first characters of the string to the upper case and all
1094 the subsequent ones to the lower case and returns the result.
1095
1096 @since 2.9.0
1097
1098 @see Capitalize()
1099 */
1100 wxString& MakeCapitalized();
1101
1102 /**
1103 Converts all characters to lower case and returns the reference to the
1104 modified string.
1105
1106 @see Lower()
1107 */
1108 wxString& MakeLower();
1109
1110 /**
1111 Converts all characters to upper case and returns the reference to the
1112 modified string.
1113
1114 @see Upper()
1115 */
1116 wxString& MakeUpper();
1117
1118 /**
1119 Returns this string converted to upper case.
1120
1121 @see MakeUpper()
1122 */
1123 wxString Upper() const;
1124
1125 /**
1126 The same as MakeUpper().
1127
1128 This is a wxWidgets 1.xx compatibility function; you should not use it in new
1129 code.
1130 */
1131 void UpperCase();
1132
1133 //@}
1134
1135
1136 /**
1137 @member_group_name{search, Searching and replacing}
1138
1139 These functions replace the standard @c strchr() and @c strstr()
1140 functions.
1141
1142 See also the find(), rfind(), replace() STL-like functions.
1143 */
1144 //@{
1145
1146 /**
1147 Searches for the given character @a ch.
1148 Returns the position or @c wxNOT_FOUND if not found.
1149 */
1150 int Find(wxUniChar ch, bool fromEnd = false) const;
1151
1152 /**
1153 Searches for the given string @a sub.
1154 Returns the starting position or @c wxNOT_FOUND if not found.
1155 */
1156 int Find(const wxString& sub) const;
1157
1158 /**
1159 Same as Find().
1160
1161 This is a wxWidgets 1.xx compatibility function;
1162 you should not use it in new code.
1163 */
1164 int First(wxUniChar ch) const;
1165
1166 /**
1167 Same as Find().
1168
1169 This is a wxWidgets 1.xx compatibility function;
1170 you should not use it in new code.
1171 */
1172 int First(const wxString& str) const;
1173
1174 /**
1175 Replace first (or all) occurrences of substring with another one.
1176
1177 @param strOld
1178 The string to search for replacing.
1179 @param strNew
1180 The substitution string.
1181 @param replaceAll
1182 If @true a global replace will be done (default), otherwise only the
1183 first occurrence will be replaced.
1184
1185 Returns the number of replacements made.
1186 */
1187 size_t Replace(const wxString& strOld, const wxString& strNew,
1188 bool replaceAll = true);
1189
1190 //@}
1191
1192
1193
1194 /**
1195 @member_group_name{numconv, Conversion to numbers}
1196
1197 The string provides functions for conversion to signed and unsigned integer and
1198 floating point numbers.
1199
1200 All functions take a pointer to the variable to put the numeric value
1201 in and return @true if the @b entire string could be converted to a
1202 number. Notice if there is a valid number in the beginning of the
1203 string, it is returned in the output parameter even if the function
1204 returns @false because there is more text following it.
1205 */
1206 //@{
1207
1208 /**
1209 Attempts to convert the string to a floating point number.
1210
1211 Returns @true on success (the number is stored in the location pointed to by
1212 @a val) or @false if the string does not represent such number (the value of
1213 @a val may still be modified in this case).
1214
1215 Note that unlike ToCDouble() this function uses a localized version of
1216 @c wxStrtod() and thus needs as decimal point (and thousands separator) the
1217 locale-specific decimal point. Thus you should use this function only when
1218 you are sure that this string contains a floating point number formatted with
1219 the rules of the locale currently in use (see wxLocale).
1220
1221 Also notice that even this function is locale-specific it does not
1222 support strings with thousands separators in them, even if the current
1223 locale uses digits grouping. You may use wxNumberFormatter::FromString()
1224 to parse such strings.
1225
1226 Please refer to the documentation of the standard function @c strtod()
1227 for more details about the supported syntax.
1228
1229 @see ToCDouble(), ToLong(), ToULong()
1230 */
1231 bool ToDouble(double* val) const;
1232
1233 /**
1234 Variant of ToDouble() always working in "C" locale.
1235
1236 Works like ToDouble() but unlike it this function expects the floating point
1237 number to be formatted always with the rules dictated by the "C" locale
1238 (in particular, the decimal point must be a dot), independently from the
1239 current application-wide locale (see wxLocale).
1240
1241 @see ToDouble(), ToLong(), ToULong()
1242 */
1243 bool ToCDouble(double* val) const;
1244
1245 /**
1246 Attempts to convert the string to a signed integer in base @a base.
1247
1248 Returns @true on success in which case the number is stored in the location
1249 pointed to by @a val or @false if the string does not represent a
1250 valid number in the given base (the value of @a val may still be
1251 modified in this case).
1252
1253 The value of @a base must be comprised between 2 and 36, inclusive, or
1254 be a special value 0 which means that the usual rules of @c C numbers are
1255 applied: if the number starts with @c 0x it is considered to be in base
1256 16, if it starts with @c 0 - in base 8 and in base 10 otherwise. Note
1257 that you may not want to specify the base 0 if you are parsing the numbers
1258 which may have leading zeroes as they can yield unexpected (to the user not
1259 familiar with C) results.
1260
1261 Note that unlike ToCLong() this function uses a localized version of
1262 @c wxStrtol(). Thus you should use this function only when you are sure
1263 that this string contains an integer number formatted with
1264 the rules of the locale currently in use (see wxLocale).
1265
1266 As with ToDouble(), this function does not support strings containing
1267 thousands separators even if the current locale uses digits grouping.
1268 You may use wxNumberFormatter::FromString() to parse such strings.
1269
1270 Please refer to the documentation of the standard function @c strtol()
1271 for more details about the supported syntax.
1272
1273 @see ToCDouble(), ToDouble(), ToULong()
1274 */
1275 bool ToLong(long* val, int base = 10) const;
1276
1277 /**
1278 Variant of ToLong() always working in "C" locale.
1279
1280 Works like ToLong() but unlike it this function expects the integer
1281 number to be formatted always with the rules dictated by the "C" locale,
1282 independently from the current application-wide locale (see wxLocale).
1283
1284 @see ToDouble(), ToLong(), ToULong()
1285 */
1286 bool ToCLong(long* val, int base = 10) const;
1287
1288 /**
1289 This is exactly the same as ToLong() but works with 64 bit integer numbers.
1290
1291 Notice that currently it doesn't work (always returns @false) if parsing of 64
1292 bit numbers is not supported by the underlying C run-time library. Compilers
1293 with C99 support and Microsoft Visual C++ version 7 and higher do support this.
1294
1295 @see ToLong(), ToULongLong()
1296 */
1297 bool ToLongLong(wxLongLong_t* val, int base = 10) const;
1298
1299 /**
1300 Attempts to convert the string to an unsigned integer in base @a base.
1301
1302 Returns @true on success in which case the number is stored in the
1303 location pointed to by @a val or @false if the string does not
1304 represent a valid number in the given base (the value of @a val may
1305 still be modified in this case).
1306
1307 Please notice that this function behaves in the same way as the standard
1308 @c strtoul() and so it simply converts negative numbers to unsigned
1309 representation instead of rejecting them (e.g. -1 is returned as @c ULONG_MAX).
1310
1311 See ToLong() for the more detailed description of the @a base parameter
1312 (and of the locale-specific behaviour of this function).
1313
1314 @see ToCULong(), ToDouble(), ToLong()
1315 */
1316 bool ToULong(unsigned long* val, int base = 10) const;
1317
1318 /**
1319 Variant of ToULong() always working in "C" locale.
1320
1321 Works like ToULong() but unlike it this function expects the integer
1322 number to be formatted always with the rules dictated by the "C" locale,
1323 independently from the current application-wide locale (see wxLocale).
1324
1325 @see ToDouble(), ToLong(), ToULong()
1326 */
1327 bool ToCULong(unsigned long* val, int base = 10) const;
1328
1329 /**
1330 This is exactly the same as ToULong() but works with 64 bit integer
1331 numbers.
1332
1333 Please see ToLongLong() for additional remarks.
1334 */
1335 bool ToULongLong(wxULongLong_t* val, int base = 10) const;
1336
1337 //@}
1338
1339
1340 /**
1341 @member_group_name{fmt, Formatting and printing}
1342
1343 Both formatted versions (Printf/() and stream-like insertion operators
1344 exist (for basic types only).
1345
1346 See also the static Format() and FormatV() functions.
1347 */
1348 //@{
1349
1350 /**
1351 Similar to the standard function @e sprintf(). Returns the number of
1352 characters written, or an integer less than zero on error.
1353 Note that if @c wxUSE_PRINTF_POS_PARAMS is set to 1, then this function supports
1354 Unix98-style positional parameters:
1355
1356 @code
1357 wxString str;
1358
1359 str.Printf(wxT("%d %d %d"), 1, 2, 3);
1360 // str now contains "1 2 3"
1361
1362 str.Printf(wxT("%2$d %3$d %1$d"), 1, 2, 3);
1363 // str now contains "2 3 1"
1364 @endcode
1365
1366 @note This function will use a safe version of @e vsprintf() (usually called
1367 @e vsnprintf()) whenever available to always allocate the buffer of correct
1368 size. Unfortunately, this function is not available on all platforms and the
1369 dangerous @e vsprintf() will be used then which may lead to buffer overflows.
1370 */
1371 int Printf(const wxString& pszFormat, ...);
1372
1373 /**
1374 Similar to vprintf. Returns the number of characters written, or an integer
1375 less than zero
1376 on error.
1377 */
1378 int PrintfV(const wxString& pszFormat, va_list argPtr);
1379
1380 //@}
1381
1382
1383 /**
1384 @member_group_name{mem, Memory management}
1385
1386 The following are "advanced" functions and they will be needed rarely.
1387 Alloc() and Shrink() are only interesting for optimization purposes.
1388 wxStringBuffer and wxStringBufferLength classes may be very useful when working
1389 with some external API which requires the caller to provide a writable buffer.
1390
1391 See also the reserve() and resize() STL-like functions.
1392 */
1393 //@{
1394
1395 /**
1396 Preallocate enough space for wxString to store @a nLen characters.
1397
1398 Please note that this method does the same thing as the standard
1399 reserve() one and shouldn't be used in new code.
1400
1401 This function may be used to increase speed when the string is
1402 constructed by repeated concatenation as in
1403
1404 @code
1405 // delete all vowels from the string
1406 wxString DeleteAllVowels(const wxString& original)
1407 {
1408 wxString result;
1409
1410 size_t len = original.length();
1411
1412 result.Alloc(len);
1413
1414 for ( size_t n = 0; n < len; n++ )
1415 {
1416 if ( strchr("aeuio", tolower(original[n])) == NULL )
1417 result += original[n];
1418 }
1419
1420 return result;
1421 }
1422 @endcode
1423
1424 because it will avoid the need to reallocate string memory many times
1425 (in case of long strings). Note that it does not set the maximal length
1426 of a string -- it will still expand if more than @a nLen characters are
1427 stored in it. Also, it does not truncate the existing string (use
1428 Truncate() for this) even if its current length is greater than @a nLen.
1429
1430 @return @true if memory was successfully allocated, @false otherwise.
1431 */
1432 bool Alloc(size_t nLen);
1433
1434 /**
1435 Minimizes the string's memory. This can be useful after a call to
1436 Alloc() if too much memory were preallocated.
1437 */
1438 bool Shrink();
1439
1440 /**
1441 Returns a deep copy of the string.
1442
1443 That is, the returned string is guaranteed to not share data with this
1444 string when using reference-counted wxString implementation.
1445
1446 This method is primarily useful for passing strings between threads
1447 (because wxString is not thread-safe). Unlike creating a copy using
1448 @c wxString(c_str()), Clone() handles embedded NULs correctly.
1449
1450 @since 2.9.0
1451 */
1452 wxString Clone() const;
1453
1454 /**
1455 Empties the string and frees memory occupied by it.
1456
1457 @see Empty()
1458 */
1459 void Clear();
1460
1461 //@}
1462
1463
1464
1465 /**
1466 @member_group_name{misc, Miscellaneous}
1467
1468 Miscellaneous other string functions.
1469 */
1470 //@{
1471
1472 /**
1473 Returns @true if target appears anywhere in wxString; else @false.
1474
1475 This is a wxWidgets 1.xx compatibility function; you should not use it in new code.
1476 */
1477 bool Contains(const wxString& str) const;
1478
1479 /**
1480 Makes the string empty, but doesn't free memory occupied by the string.
1481
1482 @see Clear().
1483 */
1484 void Empty();
1485
1486 /**
1487 Returns the number of occurrences of @e ch in the string.
1488
1489 This is a wxWidgets 1.xx compatibility function; you should not use it in new code.
1490 */
1491 int Freq(wxUniChar ch) const;
1492
1493 /**
1494 Returns @true if the string contains only ASCII characters.
1495 See wxUniChar::IsAscii for more details.
1496
1497 This is a wxWidgets 1.xx compatibility function; you should not use it in new
1498 code.
1499 */
1500 bool IsAscii() const;
1501
1502 /**
1503 Returns @true if the string is an integer (with possible sign).
1504
1505 This is a wxWidgets 1.xx compatibility function; you should not use it in new code.
1506 */
1507 bool IsNumber() const;
1508
1509 /**
1510 Returns @true if the string is a word.
1511
1512 This is a wxWidgets 1.xx compatibility function; you should not use it in new code.
1513 */
1514 bool IsWord() const;
1515
1516 /**
1517 Adds @a count copies of @a chPad to the beginning, or to the end of the
1518 string (the default).
1519
1520 Removes spaces from the left or from the right (default).
1521 */
1522 wxString& Pad(size_t count, wxUniChar chPad = ' ', bool fromRight = true);
1523
1524 /**
1525 Removes all characters from the string starting at @a pos.
1526 Use Truncate() as a more readable alternative.
1527
1528 This is a wxWidgets 1.xx compatibility function; you should not use it in new code.
1529 */
1530 wxString& Remove(size_t pos);
1531
1532 /**
1533 Removes @a len characters from the string, starting at @a pos.
1534
1535 This is a wxWidgets 1.xx compatibility function; you should not use it in new code.
1536 */
1537 wxString& Remove(size_t pos, size_t len);
1538
1539 /**
1540 Removes the last character.
1541 */
1542 wxString& RemoveLast(size_t n = 1);
1543
1544 /**
1545 Strip characters at the front and/or end.
1546
1547 This is the same as Trim() except that it doesn't change this string.
1548
1549 This is a wxWidgets 1.xx compatibility function; you should not use it in new code.
1550 */
1551 wxString Strip(stripType s = trailing) const;
1552
1553 /**
1554 Removes white-space (space, tabs, form feed, newline and carriage return) from
1555 the left or from the right end of the string (right is default).
1556 */
1557 wxString& Trim(bool fromRight = true);
1558
1559 /**
1560 Truncate the string to the given length.
1561 */
1562 wxString& Truncate(size_t len);
1563
1564 //@}
1565
1566
1567
1568
1569 /**
1570 @member_group_name{iter, Iterator interface}
1571
1572 These methods return iterators to the beginning or end of the string.
1573
1574 Please see any STL reference (e.g. http://www.cppreference.com/wiki/string/start)
1575 for their documentation.
1576 */
1577 //@{
1578
1579 const_iterator begin() const;
1580 iterator begin();
1581 const_iterator end() const;
1582 iterator end();
1583
1584 const_reverse_iterator rbegin() const;
1585 reverse_iterator rbegin();
1586 const_reverse_iterator rend() const;
1587 reverse_iterator rend();
1588
1589 //@}
1590
1591
1592
1593 /**
1594 @member_group_name{stl, STL interface}
1595
1596 The supported STL functions are listed here.
1597
1598 Please see any STL reference (e.g. http://www.cppreference.com/wiki/string/start)
1599 for their documentation.
1600 */
1601 //@{
1602
1603 wxString& append(const wxString& str, size_t pos, size_t n);
1604 wxString& append(const wxString& str);
1605 wxString& append(const char *sz, size_t n);
1606 wxString& append(const wchar_t *sz, size_t n);
1607 wxString& append(size_t n, wxUniChar ch);
1608 wxString& append(const_iterator first, const_iterator last);
1609
1610 wxString& assign(const wxString& str, size_t pos, size_t n);
1611 wxString& assign(const wxString& str);
1612 wxString& assign(const char *sz, size_t n);
1613 wxString& assign(const wchar_t *sz, size_t n);
1614 wxString& assign(size_t n, wxUniChar ch);
1615 wxString& assign(const_iterator first, const_iterator last);
1616
1617 wxUniChar at(size_t n) const;
1618 wxUniCharRef at(size_t n);
1619
1620 void clear();
1621
1622 size_type capacity() const;
1623
1624 int compare(const wxString& str) const;
1625 int compare(size_t nStart, size_t nLen, const wxString& str) const;
1626 int compare(size_t nStart, size_t nLen,
1627 const wxString& str, size_t nStart2, size_t nLen2) const;
1628 int compare(size_t nStart, size_t nLen,
1629 const char* sz, size_t nCount = npos) const;
1630 int compare(size_t nStart, size_t nLen,
1631 const wchar_t* sz, size_t nCount = npos) const;
1632
1633 wxCStrData data() const;
1634
1635 bool empty() const;
1636
1637 wxString& erase(size_type pos = 0, size_type n = npos);
1638 iterator erase(iterator first, iterator last);
1639 iterator erase(iterator first);
1640
1641 size_t find(const wxString& str, size_t nStart = 0) const;
1642 size_t find(const char* sz, size_t nStart = 0, size_t n = npos) const;
1643 size_t find(const wchar_t* sz, size_t nStart = 0, size_t n = npos) const;
1644 size_t find(wxUniChar ch, size_t nStart = 0) const;
1645 size_t find_first_of(const char* sz, size_t nStart = 0) const;
1646 size_t find_first_of(const wchar_t* sz, size_t nStart = 0) const;
1647 size_t find_first_of(const char* sz, size_t nStart, size_t n) const;
1648 size_t find_first_of(const wchar_t* sz, size_t nStart, size_t n) const;
1649 size_t find_first_of(wxUniChar c, size_t nStart = 0) const;
1650 size_t find_last_of (const wxString& str, size_t nStart = npos) const;
1651 size_t find_last_of (const char* sz, size_t nStart = npos) const;
1652 size_t find_last_of (const wchar_t* sz, size_t nStart = npos) const;
1653 size_t find_last_of(const char* sz, size_t nStart, size_t n) const;
1654 size_t find_last_of(const wchar_t* sz, size_t nStart, size_t n) const;
1655 size_t find_last_of(wxUniChar c, size_t nStart = npos) const;
1656 size_t find_first_not_of(const wxString& str, size_t nStart = 0) const;
1657 size_t find_first_not_of(const char* sz, size_t nStart = 0) const;
1658 size_t find_first_not_of(const wchar_t* sz, size_t nStart = 0) const;
1659 size_t find_first_not_of(const char* sz, size_t nStart, size_t n) const;
1660 size_t find_first_not_of(const wchar_t* sz, size_t nStart, size_t n) const;
1661 size_t find_first_not_of(wxUniChar ch, size_t nStart = 0) const;
1662 size_t find_last_not_of(const wxString& str, size_t nStart = npos) const;
1663 size_t find_last_not_of(const char* sz, size_t nStart = npos) const;
1664 size_t find_last_not_of(const wchar_t* sz, size_t nStart = npos) const;
1665 size_t find_last_not_of(const char* sz, size_t nStart, size_t n) const;
1666 size_t find_last_not_of(const wchar_t* sz, size_t nStart, size_t n) const;
1667
1668 wxString& insert(size_t nPos, const wxString& str);
1669 wxString& insert(size_t nPos, const wxString& str, size_t nStart, size_t n);
1670 wxString& insert(size_t nPos, const char *sz, size_t n);
1671 wxString& insert(size_t nPos, const wchar_t *sz, size_t n);
1672 wxString& insert(size_t nPos, size_t n, wxUniChar ch);
1673 iterator insert(iterator it, wxUniChar ch);
1674 void insert(iterator it, const_iterator first, const_iterator last);
1675 void insert(iterator it, size_type n, wxUniChar ch);
1676
1677 size_t length() const;
1678
1679 size_type max_size() const;
1680
1681 void reserve(size_t sz);
1682 void resize(size_t nSize, wxUniChar ch = '\0');
1683
1684 wxString& replace(size_t nStart, size_t nLen, const wxString& str);
1685 wxString& replace(size_t nStart, size_t nLen, size_t nCount, wxUniChar ch);
1686 wxString& replace(size_t nStart, size_t nLen,
1687 const wxString& str, size_t nStart2, size_t nLen2);
1688 wxString& replace(size_t nStart, size_t nLen,
1689 const char* sz, size_t nCount);
1690 wxString& replace(size_t nStart, size_t nLen,
1691 const wchar_t* sz, size_t nCount);
1692 wxString& replace(size_t nStart, size_t nLen,
1693 const wxString& s, size_t nCount);
1694 wxString& replace(iterator first, iterator last, const wxString& s);
1695 wxString& replace(iterator first, iterator last, const char* s, size_type n);
1696 wxString& replace(iterator first, iterator last, const wchar_t* s, size_type n);
1697 wxString& replace(iterator first, iterator last, size_type n, wxUniChar ch);
1698 wxString& replace(iterator first, iterator last,
1699 const_iterator first1, const_iterator last1);
1700 wxString& replace(iterator first, iterator last,
1701 const char *first1, const char *last1);
1702 wxString& replace(iterator first, iterator last,
1703 const wchar_t *first1, const wchar_t *last1);
1704
1705 size_t rfind(const wxString& str, size_t nStart = npos) const;
1706 size_t rfind(const char* sz, size_t nStart = npos, size_t n = npos) const;
1707 size_t rfind(const wchar_t* sz, size_t nStart = npos, size_t n = npos) const;
1708 size_t rfind(wxUniChar ch, size_t nStart = npos) const;
1709
1710 size_type size() const;
1711 wxString substr(size_t nStart = 0, size_t nLen = npos) const;
1712 void swap(wxString& str);
1713
1714 //@}
1715
1716
1717
1718 // STATIC FUNCTIONS
1719 // Keep these functions separated from the other groups or Doxygen gets confused
1720 // -----------------------------------------------------------------------------
1721
1722 /**
1723 An 'invalid' value for string index
1724 */
1725 static const size_t npos;
1726
1727 /**
1728 This static function returns the string containing the result of calling
1729 Printf() with the passed parameters on it.
1730
1731 @see FormatV(), Printf()
1732 */
1733 static wxString Format(const wxString& format, ...);
1734
1735 /**
1736 This static function returns the string containing the result of calling
1737 PrintfV() with the passed parameters on it.
1738
1739 @see Format(), PrintfV()
1740 */
1741 static wxString FormatV(const wxString& format, va_list argptr);
1742
1743 //@{
1744 /**
1745 Converts given buffer of binary data from 8-bit string to wxString. In
1746 Unicode build, the string is interpreted as being in ISO-8859-1
1747 encoding. The version without @e len parameter takes NUL-terminated
1748 data.
1749
1750 This is a convenience method useful when storing binary data in
1751 wxString. It should be used @em only for that purpose and only in
1752 conjunction with To8BitData(). Use mb_str() for conversion of character
1753 data to known encoding.
1754
1755 @since 2.8.4
1756
1757 @see wxString::To8BitData()
1758 */
1759 static wxString From8BitData(const char* buf, size_t len);
1760 static wxString From8BitData(const char* buf);
1761 //@}
1762
1763 //@{
1764 /**
1765 Converts the string or character from an ASCII, 7-bit form
1766 to the native wxString representation.
1767 */
1768 static wxString FromAscii(const char* s);
1769 static wxString FromAscii(const unsigned char* s);
1770 static wxString FromAscii(const char* s, size_t len);
1771 static wxString FromAscii(const unsigned char* s, size_t len);
1772 static wxString FromAscii(char c);
1773 //@}
1774
1775 /**
1776 Returns a string with the textual representation of the number in C
1777 locale.
1778
1779 Unlike FromDouble() the string returned by this function always uses
1780 the period character as decimal separator, independently of the current
1781 locale. Otherwise its behaviour is identical to the other function.
1782
1783 @since 2.9.1
1784
1785 @see ToCDouble()
1786 */
1787 static wxString FromCDouble(double val, int precision = -1);
1788
1789 /**
1790 Returns a string with the textual representation of the number.
1791
1792 For the default value of @a precision, this function behaves as a
1793 simple wrapper for @code wxString::Format("%g", val) @endcode. If @a
1794 precision is positive (or zero), the @c %.Nf format is used with the
1795 given precision value.
1796
1797 Notice that the string returned by this function uses the decimal
1798 separator appropriate for the current locale, e.g. @c "," and not a
1799 period in French locale. Use FromCDouble() if this is unwanted.
1800
1801 @param val
1802 The value to format.
1803 @param precision
1804 The number of fractional digits to use in or -1 to use the most
1805 appropriate format. This parameter is new in wxWidgets 2.9.2.
1806
1807 @since 2.9.1
1808
1809 @see ToDouble()
1810 */
1811 static wxString FromDouble(double val, int precision = -1);
1812
1813 //@{
1814 /**
1815 Converts C string encoded in UTF-8 to wxString.
1816
1817 If @a s is not a valid UTF-8 string, an empty string is returned.
1818
1819 Notice that when using UTF-8 wxWidgets build there is a more efficient
1820 alternative to this function called FromUTF8Unchecked() which, unlike
1821 this one, doesn't check that the input string is valid.
1822
1823 @since 2.8.4
1824 */
1825 static wxString FromUTF8(const char* s);
1826 static wxString FromUTF8(const char* s, size_t len);
1827 //@}
1828
1829 //@{
1830 /**
1831 Converts C string encoded in UTF-8 to wxString without checking its
1832 validity.
1833
1834 This method assumes that @a s is a valid UTF-8 sequence and doesn't do
1835 any validation (although an assert failure is triggered in debug builds
1836 if the string is invalid). Only use it if you are absolutely sure that
1837 @a s is a correct UTF-8 string (e.g. because it comes from another
1838 library using UTF-8) and if the performance matters, otherwise use
1839 slower (in UTF-8 build) but safer FromUTF8(). Passing a bad UTF-8
1840 string to this function will result in creating a corrupted wxString
1841 and all the subsequent operations on it will be undefined.
1842
1843 @since 2.8.9
1844 */
1845 static wxString FromUTF8Unchecked(const char* s);
1846 static wxString FromUTF8Unchecked(const char* s, size_t len);
1847 //@}
1848 };
1849
1850
1851
1852 //@{
1853 /**
1854 Comparison operator for string types.
1855 */
1856 inline bool operator==(const wxString& s1, const wxString& s2);
1857 inline bool operator!=(const wxString& s1, const wxString& s2);
1858 inline bool operator< (const wxString& s1, const wxString& s2);
1859 inline bool operator> (const wxString& s1, const wxString& s2);
1860 inline bool operator<=(const wxString& s1, const wxString& s2);
1861 inline bool operator>=(const wxString& s1, const wxString& s2);
1862 inline bool operator==(const wxString& s1, const wxCStrData& s2);
1863 inline bool operator==(const wxCStrData& s1, const wxString& s2);
1864 inline bool operator!=(const wxString& s1, const wxCStrData& s2);
1865 inline bool operator!=(const wxCStrData& s1, const wxString& s2);
1866 inline bool operator==(const wxString& s1, const wxWCharBuffer& s2);
1867 inline bool operator==(const wxWCharBuffer& s1, const wxString& s2);
1868 inline bool operator!=(const wxString& s1, const wxWCharBuffer& s2);
1869 inline bool operator!=(const wxWCharBuffer& s1, const wxString& s2);
1870 inline bool operator==(const wxString& s1, const wxCharBuffer& s2);
1871 inline bool operator==(const wxCharBuffer& s1, const wxString& s2);
1872 inline bool operator!=(const wxString& s1, const wxCharBuffer& s2);
1873 inline bool operator!=(const wxCharBuffer& s1, const wxString& s2);
1874 //@}
1875
1876 //@{
1877 /**
1878 Comparison operators char types.
1879 */
1880 inline bool operator==(const wxUniChar& c, const wxString& s);
1881 inline bool operator==(const wxUniCharRef& c, const wxString& s);
1882 inline bool operator==(char c, const wxString& s);
1883 inline bool operator==(wchar_t c, const wxString& s);
1884 inline bool operator==(int c, const wxString& s);
1885 inline bool operator==(const wxString& s, const wxUniChar& c);
1886 inline bool operator==(const wxString& s, const wxUniCharRef& c);
1887 inline bool operator==(const wxString& s, char c);
1888 inline bool operator==(const wxString& s, wchar_t c);
1889 inline bool operator!=(const wxUniChar& c, const wxString& s);
1890 inline bool operator!=(const wxUniCharRef& c, const wxString& s);
1891 inline bool operator!=(char c, const wxString& s);
1892 inline bool operator!=(wchar_t c, const wxString& s);
1893 inline bool operator!=(int c, const wxString& s);
1894 inline bool operator!=(const wxString& s, const wxUniChar& c);
1895 inline bool operator!=(const wxString& s, const wxUniCharRef& c);
1896 inline bool operator!=(const wxString& s, char c);
1897 inline bool operator!=(const wxString& s, wchar_t c);
1898 //@}
1899
1900 /**
1901 The global wxString instance of an empty string.
1902 Used extensively in the entire wxWidgets API.
1903 */
1904 wxString wxEmptyString;
1905
1906
1907
1908 /**
1909 @class wxStringBufferLength
1910
1911 This tiny class allows you to conveniently access the wxString internal buffer
1912 as a writable pointer without any risk of forgetting to restore the string to
1913 the usable state later, and allows the user to set the internal length of the string.
1914
1915 For example, assuming you have a low-level OS function called
1916 @c "int GetMeaningOfLifeAsString(char *)" copying the value in the provided
1917 buffer (which must be writable, of course), and returning the actual length
1918 of the string, you might call it like this:
1919
1920 @code
1921 wxString theAnswer;
1922 wxStringBufferLength theAnswerBuffer(theAnswer, 1024);
1923 int nLength = GetMeaningOfLifeAsString(theAnswerBuffer);
1924 theAnswerBuffer.SetLength(nLength);
1925 if ( theAnswer != "42" )
1926 wxLogError("Something is very wrong!");
1927 @endcode
1928
1929 Note that the exact usage of this depends on whether or not wxUSE_STL is
1930 enabled. If wxUSE_STL is enabled, wxStringBuffer creates a separate empty
1931 character buffer, and if wxUSE_STL is disabled, it uses GetWriteBuf() from
1932 wxString, keeping the same buffer wxString uses intact. In other words,
1933 relying on wxStringBuffer containing the old wxString data is not a good
1934 idea if you want to build your program both with and without wxUSE_STL.
1935
1936 Note that wxStringBuffer::SetLength @b must be called before
1937 wxStringBufferLength destructs.
1938
1939 @library{wxbase}
1940 @category{data}
1941 */
1942 class wxStringBufferLength
1943 {
1944 public:
1945 /**
1946 Constructs a writable string buffer object associated with the given string
1947 and containing enough space for at least @a len characters.
1948
1949 Basically, this is equivalent to calling wxString::GetWriteBuf and
1950 saving the result.
1951 */
1952 wxStringBufferLength(const wxString& str, size_t len);
1953
1954 /**
1955 Restores the string passed to the constructor to the usable state by calling
1956 wxString::UngetWriteBuf on it.
1957 */
1958 ~wxStringBufferLength();
1959
1960 /**
1961 Sets the internal length of the string referred to by wxStringBufferLength to
1962 @a nLength characters.
1963
1964 Must be called before wxStringBufferLength destructs.
1965 */
1966 void SetLength(size_t nLength);
1967
1968 /**
1969 Returns the writable pointer to a buffer of the size at least equal to the
1970 length specified in the constructor.
1971 */
1972 wxChar* operator wxChar *();
1973 };
1974
1975
1976 /**
1977 @class wxStringBuffer
1978
1979 This tiny class allows you to conveniently access the wxString internal buffer
1980 as a writable pointer without any risk of forgetting to restore the string
1981 to the usable state later.
1982
1983 For example, assuming you have a low-level OS function called
1984 @c "GetMeaningOfLifeAsString(char *)" returning the value in the provided
1985 buffer (which must be writable, of course) you might call it like this:
1986
1987 @code
1988 wxString theAnswer;
1989 GetMeaningOfLifeAsString(wxStringBuffer(theAnswer, 1024));
1990 if ( theAnswer != "42" )
1991 wxLogError("Something is very wrong!");
1992 @endcode
1993
1994 Note that the exact usage of this depends on whether or not @c wxUSE_STL is
1995 enabled. If @c wxUSE_STL is enabled, wxStringBuffer creates a separate empty
1996 character buffer, and if @c wxUSE_STL is disabled, it uses GetWriteBuf() from
1997 wxString, keeping the same buffer wxString uses intact. In other words,
1998 relying on wxStringBuffer containing the old wxString data is not a good
1999 idea if you want to build your program both with and without @c wxUSE_STL.
2000
2001 @library{wxbase}
2002 @category{data}
2003 */
2004 class wxStringBuffer
2005 {
2006 public:
2007 /**
2008 Constructs a writable string buffer object associated with the given string
2009 and containing enough space for at least @a len characters.
2010 Basically, this is equivalent to calling wxString::GetWriteBuf() and
2011 saving the result.
2012 */
2013 wxStringBuffer(const wxString& str, size_t len);
2014
2015 /**
2016 Restores the string passed to the constructor to the usable state by calling
2017 wxString::UngetWriteBuf() on it.
2018 */
2019 ~wxStringBuffer();
2020
2021 /**
2022 Returns the writable pointer to a buffer of the size at least equal to the
2023 length specified in the constructor.
2024 */
2025 wxStringCharType* operator wxStringCharType *();
2026 };
2027
2028
2029 /** @addtogroup group_funcmacro_string */
2030 //@{
2031
2032 /**
2033 Allows to extend a function with the signature:
2034 @code bool SomeFunc(const wxUniChar& c) @endcode
2035 which operates on a single character, to an entire wxString.
2036
2037 E.g. if you want to check if an entire string contains only digits,
2038 you can do:
2039 @code
2040 if (wxStringCheck<wxIsdigit>(myString))
2041 ... // the entire string contains only digits!
2042 else
2043 ... // at least one character of myString is not a digit
2044 @endcode
2045
2046 @return @true if the given function returns a non-zero value for all
2047 characters of the @a val string.
2048 */
2049 template<bool (T)(const wxUniChar& c)>
2050 inline bool wxStringCheck(const wxString& val);
2051
2052 //@}