| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052 |
- /////////////////////////////////////////////////////////////////////////////
- // Name: string.h
- // Purpose: interface of wxStringBuffer, wxString
- // Author: wxWidgets team
- // Licence: wxWindows licence
- /////////////////////////////////////////////////////////////////////////////
- /**
- @class wxString
- String class for passing textual data to or receiving it from wxWidgets.
- @note
- While the use of wxString is unavoidable in wxWidgets program, you are
- encouraged to use the standard string classes @c std::string or @c
- std::wstring in your applications and convert them to and from wxString
- only when interacting with wxWidgets.
- wxString is a class representing a Unicode character string but with
- methods taking or returning both @c wchar_t wide characters and @c wchar_t*
- wide strings and traditional @c char characters and @c char* strings. The
- dual nature of wxString API makes it simple to use in all cases and,
- importantly, allows the code written for either ANSI or Unicode builds of
- the previous wxWidgets versions to compile and work correctly with the
- single unified Unicode build of wxWidgets 3.0. It is also mostly
- transparent when using wxString with the few exceptions described below.
- @section string_api API overview
- wxString tries to be similar to both @c std::string and @c std::wstring and
- can mostly be used as either class. It provides practically all of the
- methods of these classes, which behave exactly the same as in the standard
- C++, and so are not documented here (please see any standard library
- documentation, for example http://en.cppreference.com/w/cpp/string for more
- details).
- In addition to these standard methods, wxString adds functions dealing with
- the conversions between different string encodings, described below, as
- well as many extra helpers such as functions for formatted output
- (Printf(), Format(), ...), case conversion (MakeUpper(), Capitalize(), ...)
- and various others (Trim(), StartsWith(), Matches(), ...). All of the
- non-standard methods follow wxWidgets "CamelCase" naming convention and are
- documented here.
- Notice that some wxString methods exist in several versions for
- compatibility reasons. For example all of length(), Length() and Len() are
- provided. In such cases it is recommended to use the standard string-like
- method, i.e. length() in this case.
- @section string_conv Converting to and from wxString
- wxString can be created from:
- - ASCII string guaranteed to contain only 7 bit characters using
- wxString::FromAscii().
- - Narrow @c char* string in the current locale encoding using implicit
- wxString::wxString(const char*) constructor.
- - Narrow @c char* string in UTF-8 encoding using wxString::FromUTF8().
- - Narrow @c char* string in the given encoding using
- wxString::wxString(const char*, const wxMBConv&) constructor passing a
- wxCSConv corresponding to the encoding as the second argument.
- - Standard @c std::string using implicit wxString::wxString(const
- std::string&) constructor. Notice that this constructor supposes that
- the string contains data in the current locale encoding, use FromUTF8()
- or the constructor taking wxMBConv if this is not the case.
- - Wide @c wchar_t* string using implicit wxString::wxString(const
- wchar_t*) constructor.
- - Standard @c std::wstring using implicit wxString::wxString(const
- std::wstring&) constructor.
- Notice that many of the constructors are implicit, meaning that you don't
- even need to write them at all to pass the existing string to some
- wxWidgets function taking a wxString.
- Similarly, wxString can be converted to:
- - ASCII string using wxString::ToAscii(). This is a potentially
- destructive operation as all non-ASCII string characters are replaced
- with a placeholder character.
- - String in the current locale encoding implicitly or using c_str() or
- mb_str() methods. This is a potentially destructive operation as an @e
- empty string is returned if the conversion fails.
- - String in UTF-8 encoding using wxString::utf8_str().
- - String in any given encoding using mb_str() with the appropriate
- wxMBConv object. This is also a potentially destructive operation.
- - Standard @c std::string using wxString::ToStdString(). The contents
- of the returned string use the current locale encoding, so this
- conversion is potentially destructive as well.
- - Wide C string using wxString::wc_str().
- - Standard @c std::wstring using wxString::ToStdWstring().
- @note If you built wxWidgets with @c wxUSE_STL set to 1, the implicit
- conversions to both narrow and wide C strings are disabled and replaced
- with implicit conversions to @c std::string and @c std::wstring.
- Please notice that the conversions marked as "potentially destructive"
- above can result in loss of data if their result is not checked, so you
- need to verify that converting the contents of a non-empty Unicode string
- to a non-UTF-8 multibyte encoding results in non-empty string. The simplest
- and best way to ensure that the conversion never fails is to always use
- UTF-8.
- @section string_gotchas Traps for the unwary
- As mentioned above, wxString tries to be compatible with both narrow and
- wide standard string classes and mostly does it transparently, but there
- are some exceptions.
- @subsection string_gotchas_element String element access
- Some problems are caused by wxString::operator[]() which returns an object
- of a special proxy class allowing to assign either a simple @c char or a @c
- wchar_t to the given index. Because of this, the return type of this
- operator is neither @c char nor @c wchar_t nor a reference to one of these
- types but wxUniCharRef which is not a primitive type and hence can't be
- used in the @c switch statement. So the following code does @e not compile
- @code
- wxString s(...);
- switch ( s[n] ) {
- case 'A':
- ...
- break;
- }
- @endcode
- and you need to use
- @code
- switch ( s[n].GetValue() ) {
- ...
- }
- @endcode
- instead. Alternatively, you can use an explicit cast:
- @code
- switch ( static_cast<char>(s[n]) ) {
- ...
- }
- @endcode
- but notice that this will result in an assert failure if the character at
- the given position is not representable as a single @c char in the current
- encoding, so you may want to cast to @c int instead if non-ASCII values can
- be used.
- Another consequence of this unusual return type arises when it is used with
- template deduction or C++11 @c auto keyword. Unlike with the normal
- references which are deduced to be of the referenced type, the deduced type
- for wxUniCharRef is wxUniCharRef itself. This results in potentially
- unexpected behaviour, for example:
- @code
- wxString s("abc");
- auto c = s[0];
- c = 'x'; // Modifies the string!
- wxASSERT( s == "xbc" );
- @endcode
- Due to this, either explicitly specify the variable type:
- @code
- int c = s[0];
- c = 'x'; // Doesn't modify the string any more.
- wxASSERT( s == "abc" );
- @endcode
- or explicitly convert the return value:
- @code
- auto c = s[0].GetValue();
- c = 'x'; // Doesn't modify the string neither.
- wxASSERT( s == "abc" );
- @endcode
- @subsection string_gotchas_conv Conversion to C string
- A different class of problems happens due to the dual nature of the return
- value of wxString::c_str() method, which is also used for implicit
- conversions. The result of calls to this method is convertible to either
- narrow @c char* string or wide @c wchar_t* string and so, again, has
- neither the former nor the latter type. Usually, the correct type will be
- chosen depending on how you use the result but sometimes the compiler can't
- choose it because of an ambiguity, e.g.:
- @code
- // Some non-wxWidgets functions existing for both narrow and wide
- // strings:
- void dump_text(const char* text); // Version (1)
- void dump_text(const wchar_t* text); // Version (2)
- wxString s(...);
- dump_text(s); // ERROR: ambiguity.
- dump_text(s.c_str()); // ERROR: still ambiguous.
- @endcode
- In this case you need to explicitly convert to the type that you need to
- use or use a different, non-ambiguous, conversion function (which is
- usually the best choice):
- @code
- dump_text(static_cast<const char*>(s)); // OK, calls (1)
- dump_text(static_cast<const wchar_t*>(s.c_str())); // OK, calls (2)
- dump_text(s.mb_str()); // OK, calls (1)
- dump_text(s.wc_str()); // OK, calls (2)
- dump_text(s.wx_str()); // OK, calls ???
- @endcode
- @subsection string_vararg Using wxString with vararg functions
- A special subclass of the problems arising due to the polymorphic nature of
- wxString::c_str() result type happens when using functions taking an
- arbitrary number of arguments, such as the standard @c printf(). Due to the
- rules of the C++ language, the types for the "variable" arguments of such
- functions are not specified and hence the compiler cannot convert wxString
- objects, or the objects returned by wxString::c_str(), to these unknown
- types automatically. Hence neither wxString objects nor the results of most
- of the conversion functions can be passed as vararg arguments:
- @code
- // ALL EXAMPLES HERE DO NOT WORK, DO NOT USE THEM!
- printf("Don't do this: %s", s);
- printf("Don't do that: %s", s.c_str());
- printf("Nor even this: %s", s.mb_str());
- wprintf("And even not always this: %s", s.wc_str());
- @endcode
- Instead you need to either explicitly cast to the needed type:
- @code
- // These examples work but are not the best solution, see below.
- printf("You can do this: %s", static_cast<const char*>(s));
- printf("Or this: %s", static_cast<const char*>(s.c_str()));
- printf("And this: %s", static_cast<const char*>(s.mb_str()));
- wprintf("Or this: %s", static_cast<const wchar_t*>(s.wc_str()));
- @endcode
- But a better solution is to use wxWidgets-provided functions, if possible,
- as is the case for @c printf family of functions:
- @code
- // This is the recommended way.
- wxPrintf("You can do just this: %s", s);
- wxPrintf("And this (but it is redundant): %s", s.c_str());
- wxPrintf("And this (not using Unicode): %s", s.mb_str());
- wxPrintf("And this (always Unicode): %s", s.wc_str());
- @endcode
- Notice that wxPrintf() replaces both @c printf() and @c wprintf() and
- accepts wxString objects, results of c_str() calls but also @c char* and
- @c wchar_t* strings directly.
- wxWidgets provides wx-prefixed equivalents to all the standard vararg
- functions and a few more, notably wxString::Format(), wxLogMessage(),
- wxLogError() and other log functions. But if you can't use one of those
- functions and need to pass wxString objects to non-wx vararg functions, you
- need to use the explicit casts as explained above.
- @section string_performance Performance characteristics
- wxString uses @c std::basic_string internally to store its content (unless
- this is not supported by the compiler or disabled specifically when
- building wxWidgets) and it therefore inherits many features from @c
- std::basic_string. In particular, most modern implementations of @c
- std::basic_string are thread-safe and don't use reference counting (making
- copying large strings potentially expensive) and so wxString has the same
- characteristics.
- By default, wxString uses @c std::basic_string specialized for the
- platform-dependent @c wchar_t type, meaning that it is not memory-efficient
- for ASCII strings, especially under Unix platforms where every ASCII
- character, normally fitting in a byte, is represented by a 4 byte @c
- wchar_t.
- It is possible to build wxWidgets with @c wxUSE_UNICODE_UTF8 set to 1 in
- which case an UTF-8-encoded string representation is stored in @c
- std::basic_string specialized for @c char, i.e. the usual @c std::string.
- In this case the memory efficiency problem mentioned above doesn't arise
- but run-time performance of many wxString methods changes dramatically, in
- particular accessing the N-th character of the string becomes an operation
- taking O(N) time instead of O(1), i.e. constant, time by default. Thus, if
- you do use this so called UTF-8 build, you should avoid using indices to
- access the strings whenever possible and use the iterators instead. As an
- example, traversing the string using iterators is an O(N), where N is the
- string length, operation in both the normal ("wchar_t") and UTF-8 builds
- but doing it using indices becomes O(N^2) in UTF-8 case meaning that simply
- checking every character of a reasonably long (e.g. a couple of millions
- elements) string can take an unreasonably long time.
- However, if you do use iterators, UTF-8 build can be a better choice than
- the default build, especially for the memory-constrained embedded systems.
- Notice also that GTK+ and DirectFB use UTF-8 internally, so using this
- build not only saves memory for ASCII strings but also avoids conversions
- between wxWidgets and the underlying toolkit.
- @section string_index Index of the member groups
- Links for quick access to the various categories of wxString functions:
- - @ref_member_group{ctor, Constructors and assignment operators}
- - @ref_member_group{length, Length functions}
- - @ref_member_group{ch_access, Character access functions}
- - @ref_member_group{conv, Conversions functions}
- - @ref_member_group{concat, Concatenation functions}
- - @ref_member_group{cmp, Comparison functions}
- - @ref_member_group{substring, Substring extraction functions}
- - @ref_member_group{caseconv, Case conversion functions}
- - @ref_member_group{search, Searching and replacing functions}
- - @ref_member_group{numconv, Conversion to numbers functions}
- - @ref_member_group{fmt, Formatting and printing functions}
- - @ref_member_group{mem, Memory management functions}
- - @ref_member_group{misc, Miscellaneous functions}
- - @ref_member_group{iter, Iterator interface functions}
- - @ref_member_group{stl, STL interface functions}
- @library{wxbase}
- @category{data}
- @stdobjects
- ::wxEmptyString
- @see @ref overview_string, @ref overview_unicode,
- @ref group_funcmacro_string "String-related functions", wxUString,
- wxCharBuffer, wxUniChar, wxStringTokenizer, wxStringBuffer, wxStringBufferLength
- */
- class wxString
- {
- public:
- /**
- @name Standard types
- Types used with wxString.
- */
- //@{
- typedef wxUniChar value_type;
- typedef wxUniChar char_type;
- typedef wxUniCharRef reference;
- typedef wxChar* pointer;
- typedef const wxChar* const_pointer;
- typedef size_t size_type;
- typedef wxUniChar const_reference;
- //@}
- /**
- @member_group_name{ctor, Constructors and assignment operators}
- A string may be constructed either from a C string, (some number of copies of)
- a single character or a wide (Unicode) string. For all constructors (except the
- default which creates an empty string) there is also a corresponding assignment
- operator.
- See also the assign() STL-like function.
- */
- //@{
- /**
- Default constructor
- */
- wxString();
- /**
- Creates a string from another string.
- Just increases the ref count by 1.
- */
- wxString(const wxString& stringSrc);
- /**
- Construct a string consisting of @a nRepeat copies of ch.
- */
- wxString(wxUniChar ch, size_t nRepeat = 1);
- /**
- Construct a string consisting of @a nRepeat copies of ch.
- */
- wxString(wxUniCharRef ch, size_t nRepeat = 1);
- /**
- Construct a string consisting of @a nRepeat copies of ch
- converted to Unicode using the current locale encoding.
- */
- wxString(char ch, size_t nRepeat = 1);
- /**
- Construct a string consisting of @a nRepeat copies of ch.
- */
- wxString(wchar_t ch, size_t nRepeat = 1);
- /**
- Constructs a string from the string literal @a psz using
- the current locale encoding to convert it to Unicode (wxConvLibc).
- */
- wxString(const char *psz);
- /**
- Constructs a string from the string literal @a psz using
- @a conv to convert it Unicode.
- */
- wxString(const char *psz, const wxMBConv& conv);
- /**
- Constructs a string from the first @a nLength character of the string literal @a psz using
- the current locale encoding to convert it to Unicode (wxConvLibc).
- */
- wxString(const char *psz, size_t nLength);
- /**
- Constructs a string from the first @a nLength character of the string literal @a psz using
- @a conv to convert it Unicode.
- */
- wxString(const char *psz, const wxMBConv& conv, size_t nLength);
- /**
- Constructs a string from the string literal @a pwz.
- */
- wxString(const wchar_t *pwz);
- /**
- Constructs a string from the first @a nLength characters of the string literal @a pwz.
- */
- wxString(const wchar_t *pwz, size_t nLength);
- /**
- Constructs a string from @a buf using the using the current locale
- encoding to convert it to Unicode.
- */
- wxString(const wxCharBuffer& buf);
- /**
- Constructs a string from @a buf.
- */
- wxString(const wxWCharBuffer& buf);
- /**
- Constructs a string from @a str using the using the current locale encoding
- to convert it to Unicode (wxConvLibc).
- @see ToStdString()
- */
- wxString(const std::string& str);
- /**
- Constructs a string from @a str.
- @see ToStdWstring()
- */
- wxString(const std::wstring& str);
- /**
- String destructor.
- Note that this is not virtual, so wxString must not be inherited from.
- */
- ~wxString();
- /**
- Assignment: see the relative wxString constructor.
- */
- wxString operator =(const wxString& str);
- /**
- Assignment: see the relative wxString constructor.
- */
- wxString operator =(wxUniChar c);
- //@}
- /**
- @member_group_name{length, String length}
- These functions return the string length and/or check whether the string
- is empty.
- See also the length(), size() or empty() STL-like functions.
- */
- //@{
- /**
- Returns the length of the string.
- */
- size_t Len() const;
- /**
- Returns the length of the string (same as Len).
- This is a wxWidgets 1.xx compatibility function; you should not use it in new
- code.
- */
- size_t Length() const;
- /**
- Returns @true if the string is empty.
- */
- bool IsEmpty() const;
- /**
- Returns @true if the string is empty (same as wxString::IsEmpty).
- This is a wxWidgets 1.xx compatibility function; you should not use it in new
- code.
- */
- bool IsNull() const;
- /**
- Empty string is @false, so !string will only return @true if the
- string is empty.
- @see IsEmpty().
- */
- bool operator!() const;
- //@}
- /**
- @member_group_name{ch_access, Character access}
- Many functions below take a character index in the string.
- As with C strings and arrays, the indices start from 0, so the first character
- of a string is string[0]. An attempt to access a character beyond the end of the
- string (which may even be 0 if the string is empty) will provoke an assert
- failure in @ref overview_debugging "debug builds", but no checks are
- done in release builds.
- */
- //@{
- /**
- Returns the character at position @a n (read-only).
- */
- wxUniChar GetChar(size_t n) const;
- /**
- wxWidgets compatibility conversion. Same as c_str().
- */
- const wxCStrData GetData() const;
- /**
- Returns a reference to the character at position @a n.
- */
- wxUniCharRef GetWritableChar(size_t n);
- /**
- Returns a writable buffer of at least @a len bytes.
- It returns a pointer to a new memory block, and the existing data will not be copied.
- Call UngetWriteBuf() as soon as possible to put the string back into a reasonable state.
- This method is deprecated, please use wxStringBuffer or wxStringBufferLength instead.
- */
- wxStringCharType* GetWriteBuf(size_t len);
- /**
- Puts the string back into a reasonable state (in which it can be used
- normally), after GetWriteBuf() was called.
- The version of the function without the @a len parameter will calculate the
- new string length itself assuming that the string is terminated by the first
- @c NUL character in it while the second one will use the specified length
- and thus is the only version which should be used with the strings with
- embedded @c NULs (it is also slightly more efficient as @c strlen()
- doesn't have to be called).
- This method is deprecated, please use wxStringBuffer or wxStringBufferLength instead.
- */
- void UngetWriteBuf();
- /**
- @overload
- */
- void UngetWriteBuf(size_t len);
- /**
- Sets the character at position @e n.
- */
- void SetChar(size_t n, wxUniChar ch);
- /**
- Returns the last character.
- This is a wxWidgets 1.xx compatibility function;
- you should not use it in new code.
- */
- wxUniChar Last() const;
- /**
- Returns a reference to the last character (writable).
- This is a wxWidgets 1.xx compatibility function;
- you should not use it in new code.
- */
- wxUniCharRef Last();
- /**
- Returns the @a i-th character of the string.
- */
- wxUniChar operator [](size_t i) const;
- /**
- Returns a writable reference to the @a i-th character of the string.
- */
- wxUniCharRef operator [](size_t i);
- //@}
- /**
- @member_group_name{conv, Conversions}
- This section contains both implicit and explicit conversions to C style
- strings. Although implicit conversion is quite convenient, you are advised
- to use wc_str() for the sake of clarity.
- */
- //@{
- /**
- Returns a lightweight intermediate class which is in turn implicitly
- convertible to both @c const @c char* and to @c const @c wchar_t*.
- Given this ambiguity it is mostly better to use wc_str(), mb_str() or
- utf8_str() instead.
- Please see the @ref overview_unicode for more information about it.
- Note that the returned value is not convertible to @c char* or
- @c wchar_t*, use char_str() or wchar_str() if you need to pass
- string value to a function expecting non-const pointer.
- @see wc_str(), utf8_str(), c_str(), mb_str(), fn_str()
- */
- wxCStrData c_str() const;
- /**
- Returns an object with string data that is implicitly convertible to
- @c char* pointer. Note that any change to the returned buffer is lost and so
- this function is only usable for passing strings to legacy libraries that
- don't have const-correct API. Use wxStringBuffer if you want to modify
- the string.
- @see c_str()
- */
- wxWritableCharBuffer char_str(const wxMBConv& conv = wxConvLibc) const;
- /**
- Returns buffer of the specified type containing the string data.
- This method is only useful in template code, otherwise you should
- directly call mb_str() or wc_str() if you need to retrieve a narrow or
- wide string from this wxString. The template parameter @a t should be
- either @c char or @c wchar_t.
- Notice that retrieving a char buffer in UTF-8 build will return the
- internal string representation in UTF-8 while in wchar_t build the char
- buffer will contain the conversion of the string to the encoding of the
- current locale (and so can fail).
- @param len
- If non-@NULL, filled with the length of the returned buffer.
- @return
- buffer containing the string contents in the specified type,
- notice that it may be @NULL if the conversion failed (e.g. Unicode
- string couldn't be converted to the current encoding when @a T is
- @c char).
- */
- template <typename T>
- wxCharTypeBuffer<T> tchar_str(size_t *len = NULL) const;
- /**
- Returns a string representation suitable for passing to OS' functions
- for file handling.
- */
- const wchar_t* fn_str() const;
- /**
- @overload
- */
- const char* fn_str() const;
- /**
- @overload
- */
- const wxCharBuffer fn_str() const;
- /**
- Returns the multibyte (C string) representation of the string
- using @e conv's wxMBConv::cWC2MB method and returns wxCharBuffer.
- @see wc_str(), utf8_str(), c_str(), wxMBConv
- */
- const wxCharBuffer mb_str(const wxMBConv& conv = wxConvLibc) const;
- /**
- Converts the strings contents to UTF-8 and returns it either as a
- temporary wxCharBuffer object or as a pointer to the internal
- string contents in UTF-8 build.
- @see wc_str(), c_str(), mb_str()
- */
- const wxScopedCharBuffer utf8_str() const;
- /**
- Converts the strings contents to the wide character representation
- and returns it as a temporary wxWCharBuffer object (Unix and OS X)
- or returns a pointer to the internal string contents in wide character
- mode (Windows).
- The macro wxWX2WCbuf is defined as the correct return type (without const).
- @see utf8_str(), c_str(), mb_str(), fn_str(), wchar_str()
- */
- const wchar_t* wc_str() const;
- /**
- @overload
- */
- const wxWCharBuffer wc_str() const;
- /**
- Returns an object with string data that is implicitly convertible to
- @c char* pointer. Note that changes to the returned buffer may or may
- not be lost (depending on the build) and so this function is only usable for
- passing strings to legacy libraries that don't have const-correct API. Use
- wxStringBuffer if you want to modify the string.
- @see mb_str(), wc_str(), fn_str(), c_str(), char_str()
- */
- wxWritableWCharBuffer wchar_str() const;
- /**
- Explicit conversion to C string in the internal representation (either
- wchar_t* or UTF-8-encoded char*, depending on the build).
- */
- const wxStringCharType *wx_str() const;
- /**
- Converts the string to an 8-bit string in ISO-8859-1 encoding in the
- form of a wxCharBuffer (Unicode builds only).
- This is a convenience method useful when storing binary data in
- wxString. It should be used @em only for this purpose. It is only valid
- to call this method on strings created using From8BitData().
- @since 2.8.4
- @see wxString::From8BitData()
- */
- const wxScopedCharBuffer To8BitData() const;
- /**
- Converts the string to an ASCII, 7-bit string in the form of
- a wxCharBuffer (Unicode builds only) or a C string (ANSI builds).
- Note that this conversion is only lossless if the string contains only
- ASCII characters as all the non-ASCII ones are replaced with the @c '_'
- (underscore) character.
- Use mb_str() or utf8_str() to convert to other encodings.
- */
- const char* ToAscii() const;
- /**
- @overload
- */
- const wxCharBuffer ToAscii() const;
- /**
- Return the string as an std::string in current locale encoding.
- Note that if the conversion of (Unicode) string contents to the current
- locale fails, the return string will be empty. Be sure to check for
- this to avoid silent data loss.
- Instead of using this function it's also possible to write
- @code
- std::string s;
- wxString wxs;
- ...
- s = std::string(wxs);
- @endcode
- but using ToStdString() may make the code more clear.
- @since 2.9.1
- */
- std::string ToStdString() const;
- /**
- Return the string as an std::wstring.
- Unlike ToStdString(), there is no danger of data loss when using this
- function.
- @since 2.9.1
- */
- std::wstring ToStdWstring() const;
- /**
- Same as utf8_str().
- */
- const wxScopedCharBuffer ToUTF8() const;
- //@}
- /**
- @member_group_name{concat, Concatenation}
- Almost anything may be concatenated (appended to) with a string!
- Note that the various operator<<() overloads work as C++ stream insertion
- operators. They insert the given value into the string.
- Precision and format cannot be set using them. Use Printf() instead.
- See also the insert() and append() STL-like functions.
- */
- //@{
- /**
- Appends the string literal @a psz.
- */
- wxString& Append(const char* psz);
- /**
- Appends the wide string literal @a pwz.
- */
- wxString& Append(const wchar_t* pwz);
- /**
- Appends the string literal @a psz with max length @a nLen.
- */
- wxString& Append(const char* psz, size_t nLen);
- /**
- Appends the wide string literal @a psz with max length @a nLen.
- */
- wxString& Append(const wchar_t* pwz, size_t nLen);
- /**
- Appends the string @a s.
- */
- wxString& Append(const wxString& s);
- /**
- Appends the character @a ch @a count times.
- */
- wxString &Append(wxUniChar ch, size_t count = 1u);
- /**
- Prepends @a str to this string, returning a reference to this string.
- */
- wxString& Prepend(const wxString& str);
- /**
- Concatenation: returns a new string equal to the concatenation of the operands.
- */
- wxString operator +(const wxString& x, const wxString& y);
- /**
- @overload
- */
- wxString operator +(const wxString& x, wxUniChar y);
- wxString& operator<<(const wxString& s);
- wxString& operator<<(const char* psz);
- wxString& operator<<(const wchar_t* pwz);
- wxString& operator<<(const wxCStrData& psz);
- wxString& operator<<(char ch);
- wxString& operator<<(unsigned char ch);
- wxString& operator<<(wchar_t ch);
- wxString& operator<<(const wxCharBuffer& s);
- wxString& operator<<(const wxWCharBuffer& s);
- wxString& operator<<(wxUniChar ch);
- wxString& operator<<(wxUniCharRef ch);
- wxString& operator<<(unsigned int ui);
- wxString& operator<<(long l);
- wxString& operator<<(unsigned long ul);
- wxString& operator<<(wxLongLong_t ll);
- wxString& operator<<(wxULongLong_t ul);
- wxString& operator<<(float f);
- wxString& operator<<(double d);
- /**
- Concatenation in place: the argument is appended to the string.
- */
- void operator +=(const wxString& str);
- /**
- @overload
- */
- void operator +=(wxUniChar c);
- //@}
- /**
- @member_group_name{cmp, Comparison}
- The default comparison function Cmp() is case-sensitive and so is the default
- version of IsSameAs(). For case insensitive comparisons you should use CmpNoCase()
- or give a second parameter to IsSameAs(). This last function is maybe more
- convenient if only equality of the strings matters because it returns a boolean
- @true value if the strings are the same and not 0 (which is usually @false
- in C) as Cmp() does.
- Matches() is a poor man's regular expression matcher: it only understands
- '*' and '?' metacharacters in the sense of DOS command line interpreter.
- StartsWith() is helpful when parsing a line of text which should start
- with some predefined prefix and is more efficient than doing direct string
- comparison as you would also have to precalculate the length of the prefix.
- See also the compare() STL-like function.
- */
- //@{
- /**
- Case-sensitive comparison.
- Returns a positive value if the string is greater than the argument,
- zero if it is equal to it or a negative value if it is less than the
- argument (same semantics as the standard @c strcmp() function).
- @see CmpNoCase(), IsSameAs().
- */
- int Cmp(const wxString& s) const;
- /**
- Case-insensitive comparison.
- Returns a positive value if the string is greater than the argument,
- zero if it is equal to it or a negative value if it is less than the
- argument (same semantics as the standard @c strcmp() function).
- @see Cmp(), IsSameAs().
- */
- int CmpNoCase(const wxString& s) const;
- /**
- Test whether the string is equal to another string @a s.
- The test is case-sensitive if @a caseSensitive is @true (default) or not if it is
- @false.
- @return @true if the string is equal to the other one, @false otherwise.
- @see Cmp(), CmpNoCase()
- */
- bool IsSameAs(const wxString& s, bool caseSensitive = true) const;
- /**
- Test whether the string is equal to the single character @a ch.
- The test is case-sensitive if @a caseSensitive is @true (default) or not if it is
- @false.
- @return @true if the string is equal to this character, @false otherwise.
- @see Cmp(), CmpNoCase()
- */
- bool IsSameAs(wxUniChar ch, bool caseSensitive = true) const;
- /**
- Returns @true if the string contents matches a mask containing '*' and '?'.
- */
- bool Matches(const wxString& mask) const;
- /**
- This function can be used to test if the string starts with the specified
- @a prefix.
- If it does, the function will return @true and put the rest of the string
- (i.e. after the prefix) into @a rest string if it is not @NULL.
- Otherwise, the function returns @false and doesn't modify the @a rest.
- */
- bool StartsWith(const wxString& prefix, wxString *rest = NULL) const;
- /**
- This function can be used to test if the string ends with the specified
- @e suffix. If it does, the function will return @true and put the
- beginning of the string before the suffix into @e rest string if it is not
- @NULL. Otherwise, the function returns @false and doesn't
- modify the @e rest.
- */
- bool EndsWith(const wxString& suffix, wxString *rest = NULL) const;
- //@}
- /**
- @member_group_name{substring, Substring extraction}
- These functions allow you to extract a substring from the string. The
- original string is not modified and the function returns the extracted
- substring.
- See also the at() and the substr() STL-like functions.
- */
- /**
- Returns a substring starting at @e first, with length @e count, or the rest of
- the string if @a count is the default value.
- */
- wxString Mid(size_t first, size_t nCount = wxString::npos) const;
- /**
- Returns the part of the string between the indices @a from and @a to
- inclusive.
- This is a wxWidgets 1.xx compatibility function, use Mid()
- instead (but note that parameters have different meaning).
- */
- wxString SubString(size_t from, size_t to) const;
- /**
- Same as Mid() (substring extraction).
- */
- wxString operator()(size_t start, size_t len) const;
- /**
- Returns the first @a count characters of the string.
- */
- wxString Left(size_t count) const;
- /**
- Returns the last @a count characters.
- */
- wxString Right(size_t count) const;
- /**
- Gets all the characters after the first occurrence of @e ch.
- Returns the empty string if @e ch is not found.
- */
- wxString AfterFirst(wxUniChar ch) const;
- /**
- Gets all the characters after the last occurrence of @e ch.
- Returns the whole string if @e ch is not found.
- */
- wxString AfterLast(wxUniChar ch) const;
- /**
- Gets all characters before the first occurrence of @e ch.
- Returns the whole string if @a ch is not found.
- @param ch The character to look for.
- @param rest Filled with the part of the string following the first
- occurrence of @a ch or cleared if it was not found. The same string
- is returned by AfterFirst() but it is more efficient to use this
- output parameter if both the "before" and "after" parts are needed
- than calling both functions one after the other. This parameter is
- available in wxWidgets version 2.9.2 and later only.
- @return Part of the string before the first occurrence of @a ch.
- */
- wxString BeforeFirst(wxUniChar ch, wxString *rest = NULL) const;
- /**
- Gets all characters before the last occurrence of @e ch.
- Returns the empty string if @a ch is not found.
- @param ch The character to look for.
- @param rest Filled with the part of the string following the last
- occurrence of @a ch or the copy of this string if it was not found.
- The same string is returned by AfterLast() but it is more efficient
- to use this output parameter if both the "before" and "after" parts
- are needed than calling both functions one after the other. This
- parameter is available in wxWidgets version 2.9.2 and later only.
- @return Part of the string before the last occurrence of @a ch.
- */
- wxString BeforeLast(wxUniChar ch, wxString *rest = NULL) const;
- //@}
- /**
- @member_group_name{caseconv, Case conversion}
- The MakeXXX() variants modify the string in place, while the other functions
- return a new string which contains the original text converted to the upper or
- lower case and leave the original string unchanged.
- */
- //@{
- /**
- Return the copy of the string with the first string character in the
- upper case and the subsequent ones in the lower case.
- @since 2.9.0
- @see MakeCapitalized()
- */
- wxString Capitalize() const;
- /**
- Returns this string converted to the lower case.
- @see MakeLower()
- */
- wxString Lower() const;
- /**
- Same as MakeLower.
- This is a wxWidgets 1.xx compatibility function; you should not use it in new
- code.
- */
- void LowerCase();
- /**
- Converts the first characters of the string to the upper case and all
- the subsequent ones to the lower case and returns the result.
- @since 2.9.0
- @see Capitalize()
- */
- wxString& MakeCapitalized();
- /**
- Converts all characters to lower case and returns the reference to the
- modified string.
- @see Lower()
- */
- wxString& MakeLower();
- /**
- Converts all characters to upper case and returns the reference to the
- modified string.
- @see Upper()
- */
- wxString& MakeUpper();
- /**
- Returns this string converted to upper case.
- @see MakeUpper()
- */
- wxString Upper() const;
- /**
- The same as MakeUpper().
- This is a wxWidgets 1.xx compatibility function; you should not use it in new
- code.
- */
- void UpperCase();
- //@}
- /**
- @member_group_name{search, Searching and replacing}
- These functions replace the standard @c strchr() and @c strstr()
- functions.
- See also the find(), rfind(), replace() STL-like functions.
- */
- //@{
- /**
- Searches for the given character @a ch.
- Returns the position or @c wxNOT_FOUND if not found.
- */
- int Find(wxUniChar ch, bool fromEnd = false) const;
- /**
- Searches for the given string @a sub.
- Returns the starting position or @c wxNOT_FOUND if not found.
- */
- int Find(const wxString& sub) const;
- /**
- Same as Find().
- This is a wxWidgets 1.xx compatibility function;
- you should not use it in new code.
- */
- int First(wxUniChar ch) const;
- /**
- Same as Find().
- This is a wxWidgets 1.xx compatibility function;
- you should not use it in new code.
- */
- int First(const wxString& str) const;
- /**
- Replace first (or all) occurrences of substring with another one.
- @param strOld
- The string to search for replacing.
- @param strNew
- The substitution string.
- @param replaceAll
- If @true a global replace will be done (default), otherwise only the
- first occurrence will be replaced.
- Returns the number of replacements made.
- */
- size_t Replace(const wxString& strOld, const wxString& strNew,
- bool replaceAll = true);
- //@}
- /**
- @member_group_name{numconv, Conversion to numbers}
- The string provides functions for conversion to signed and unsigned integer and
- floating point numbers.
- All functions take a pointer to the variable to put the numeric value
- in and return @true if the @b entire string could be converted to a
- number. Notice if there is a valid number in the beginning of the
- string, it is returned in the output parameter even if the function
- returns @false because there is more text following it.
- */
- //@{
- /**
- Attempts to convert the string to a floating point number.
- Returns @true on success (the number is stored in the location pointed to by
- @a val) or @false if the string does not represent such number (the value of
- @a val may still be modified in this case).
- Note that unlike ToCDouble() this function uses a localized version of
- @c wxStrtod() and thus needs as decimal point (and thousands separator) the
- locale-specific decimal point. Thus you should use this function only when
- you are sure that this string contains a floating point number formatted with
- the rules of the locale currently in use (see wxLocale).
- Also notice that even this function is locale-specific it does not
- support strings with thousands separators in them, even if the current
- locale uses digits grouping. You may use wxNumberFormatter::FromString()
- to parse such strings.
- Please refer to the documentation of the standard function @c strtod()
- for more details about the supported syntax.
- @see ToCDouble(), ToLong(), ToULong()
- */
- bool ToDouble(double* val) const;
- /**
- Variant of ToDouble() always working in "C" locale.
- Works like ToDouble() but unlike it this function expects the floating point
- number to be formatted always with the rules dictated by the "C" locale
- (in particular, the decimal point must be a dot), independently from the
- current application-wide locale (see wxLocale).
- @see ToDouble(), ToLong(), ToULong()
- */
- bool ToCDouble(double* val) const;
- /**
- Attempts to convert the string to a signed integer in base @a base.
- Returns @true on success in which case the number is stored in the location
- pointed to by @a val or @false if the string does not represent a
- valid number in the given base (the value of @a val may still be
- modified in this case).
- The value of @a base must be comprised between 2 and 36, inclusive, or
- be a special value 0 which means that the usual rules of @c C numbers are
- applied: if the number starts with @c 0x it is considered to be in base
- 16, if it starts with @c 0 - in base 8 and in base 10 otherwise. Note
- that you may not want to specify the base 0 if you are parsing the numbers
- which may have leading zeroes as they can yield unexpected (to the user not
- familiar with C) results.
- Note that unlike ToCLong() this function uses a localized version of
- @c wxStrtol(). Thus you should use this function only when you are sure
- that this string contains an integer number formatted with
- the rules of the locale currently in use (see wxLocale).
- As with ToDouble(), this function does not support strings containing
- thousands separators even if the current locale uses digits grouping.
- You may use wxNumberFormatter::FromString() to parse such strings.
- Please refer to the documentation of the standard function @c strtol()
- for more details about the supported syntax.
- @see ToCDouble(), ToDouble(), ToULong()
- */
- bool ToLong(long* val, int base = 10) const;
- /**
- Variant of ToLong() always working in "C" locale.
- Works like ToLong() but unlike it this function expects the integer
- number to be formatted always with the rules dictated by the "C" locale,
- independently from the current application-wide locale (see wxLocale).
- @see ToDouble(), ToLong(), ToULong()
- */
- bool ToCLong(long* val, int base = 10) const;
- /**
- This is exactly the same as ToLong() but works with 64 bit integer numbers.
- Notice that currently it doesn't work (always returns @false) if parsing of 64
- bit numbers is not supported by the underlying C run-time library. Compilers
- with C99 support and Microsoft Visual C++ version 7 and higher do support this.
- @see ToLong(), ToULongLong()
- */
- bool ToLongLong(wxLongLong_t* val, int base = 10) const;
- /**
- Attempts to convert the string to an unsigned integer in base @a base.
- Returns @true on success in which case the number is stored in the
- location pointed to by @a val or @false if the string does not
- represent a valid number in the given base (the value of @a val may
- still be modified in this case).
- Please notice that this function behaves in the same way as the standard
- @c strtoul() and so it simply converts negative numbers to unsigned
- representation instead of rejecting them (e.g. -1 is returned as @c ULONG_MAX).
- See ToLong() for the more detailed description of the @a base parameter
- (and of the locale-specific behaviour of this function).
- @see ToCULong(), ToDouble(), ToLong()
- */
- bool ToULong(unsigned long* val, int base = 10) const;
- /**
- Variant of ToULong() always working in "C" locale.
- Works like ToULong() but unlike it this function expects the integer
- number to be formatted always with the rules dictated by the "C" locale,
- independently from the current application-wide locale (see wxLocale).
- @see ToDouble(), ToLong(), ToULong()
- */
- bool ToCULong(unsigned long* val, int base = 10) const;
- /**
- This is exactly the same as ToULong() but works with 64 bit integer
- numbers.
- Please see ToLongLong() for additional remarks.
- */
- bool ToULongLong(wxULongLong_t* val, int base = 10) const;
- //@}
- /**
- @member_group_name{fmt, Formatting and printing}
- Both formatted versions (Printf/() and stream-like insertion operators
- exist (for basic types only).
- See also the static Format() and FormatV() functions.
- */
- //@{
- /**
- Similar to the standard function @e sprintf(). Returns the number of
- characters written, or an integer less than zero on error.
- Note that if @c wxUSE_PRINTF_POS_PARAMS is set to 1, then this function supports
- Unix98-style positional parameters:
- @code
- wxString str;
- str.Printf(wxT("%d %d %d"), 1, 2, 3);
- // str now contains "1 2 3"
- str.Printf(wxT("%2$d %3$d %1$d"), 1, 2, 3);
- // str now contains "2 3 1"
- @endcode
- @note This function will use a safe version of @e vsprintf() (usually called
- @e vsnprintf()) whenever available to always allocate the buffer of correct
- size. Unfortunately, this function is not available on all platforms and the
- dangerous @e vsprintf() will be used then which may lead to buffer overflows.
- */
- int Printf(const wxString& pszFormat, ...);
- /**
- Similar to vprintf. Returns the number of characters written, or an integer
- less than zero
- on error.
- */
- int PrintfV(const wxString& pszFormat, va_list argPtr);
- //@}
- /**
- @member_group_name{mem, Memory management}
- The following are "advanced" functions and they will be needed rarely.
- Alloc() and Shrink() are only interesting for optimization purposes.
- wxStringBuffer and wxStringBufferLength classes may be very useful when working
- with some external API which requires the caller to provide a writable buffer.
- See also the reserve() and resize() STL-like functions.
- */
- //@{
- /**
- Preallocate enough space for wxString to store @a nLen characters.
- Please note that this method does the same thing as the standard
- reserve() one and shouldn't be used in new code.
- This function may be used to increase speed when the string is
- constructed by repeated concatenation as in
- @code
- // delete all vowels from the string
- wxString DeleteAllVowels(const wxString& original)
- {
- wxString result;
- size_t len = original.length();
- result.Alloc(len);
- for ( size_t n = 0; n < len; n++ )
- {
- if ( strchr("aeuio", tolower(original[n])) == NULL )
- result += original[n];
- }
- return result;
- }
- @endcode
- because it will avoid the need to reallocate string memory many times
- (in case of long strings). Note that it does not set the maximal length
- of a string -- it will still expand if more than @a nLen characters are
- stored in it. Also, it does not truncate the existing string (use
- Truncate() for this) even if its current length is greater than @a nLen.
- @return @true if memory was successfully allocated, @false otherwise.
- */
- bool Alloc(size_t nLen);
- /**
- Minimizes the string's memory. This can be useful after a call to
- Alloc() if too much memory were preallocated.
- */
- bool Shrink();
- /**
- Returns a deep copy of the string.
- That is, the returned string is guaranteed to not share data with this
- string when using reference-counted wxString implementation.
- This method is primarily useful for passing strings between threads
- (because wxString is not thread-safe). Unlike creating a copy using
- @c wxString(c_str()), Clone() handles embedded NULs correctly.
- @since 2.9.0
- */
- wxString Clone() const;
- /**
- Empties the string and frees memory occupied by it.
- @see Empty()
- */
- void Clear();
- //@}
- /**
- @member_group_name{misc, Miscellaneous}
- Miscellaneous other string functions.
- */
- //@{
- /**
- Returns @true if target appears anywhere in wxString; else @false.
- This is a wxWidgets 1.xx compatibility function; you should not use it in new code.
- */
- bool Contains(const wxString& str) const;
- /**
- Makes the string empty, but doesn't free memory occupied by the string.
- @see Clear().
- */
- void Empty();
- /**
- Returns the number of occurrences of @e ch in the string.
- This is a wxWidgets 1.xx compatibility function; you should not use it in new code.
- */
- int Freq(wxUniChar ch) const;
- /**
- Returns @true if the string contains only ASCII characters.
- See wxUniChar::IsAscii for more details.
- This is a wxWidgets 1.xx compatibility function; you should not use it in new
- code.
- */
- bool IsAscii() const;
- /**
- Returns @true if the string is an integer (with possible sign).
- This is a wxWidgets 1.xx compatibility function; you should not use it in new code.
- */
- bool IsNumber() const;
- /**
- Returns @true if the string is a word.
- This is a wxWidgets 1.xx compatibility function; you should not use it in new code.
- */
- bool IsWord() const;
- /**
- Adds @a count copies of @a chPad to the beginning, or to the end of the
- string (the default).
- Removes spaces from the left or from the right (default).
- */
- wxString& Pad(size_t count, wxUniChar chPad = ' ', bool fromRight = true);
- /**
- Removes all characters from the string starting at @a pos.
- Use Truncate() as a more readable alternative.
- This is a wxWidgets 1.xx compatibility function; you should not use it in new code.
- */
- wxString& Remove(size_t pos);
- /**
- Removes @a len characters from the string, starting at @a pos.
- This is a wxWidgets 1.xx compatibility function; you should not use it in new code.
- */
- wxString& Remove(size_t pos, size_t len);
- /**
- Removes the last character.
- */
- wxString& RemoveLast(size_t n = 1);
- /**
- Strip characters at the front and/or end.
- This is the same as Trim() except that it doesn't change this string.
- This is a wxWidgets 1.xx compatibility function; you should not use it in new code.
- */
- wxString Strip(stripType s = trailing) const;
- /**
- Removes white-space (space, tabs, form feed, newline and carriage return) from
- the left or from the right end of the string (right is default).
- */
- wxString& Trim(bool fromRight = true);
- /**
- Truncate the string to the given length.
- */
- wxString& Truncate(size_t len);
- //@}
- /**
- @member_group_name{iter, Iterator interface}
- These methods return iterators to the beginning or end of the string.
- Please see any STL reference (e.g. http://www.cppreference.com/wiki/string/start)
- for their documentation.
- */
- //@{
- const_iterator begin() const;
- iterator begin();
- const_iterator end() const;
- iterator end();
- const_reverse_iterator rbegin() const;
- reverse_iterator rbegin();
- const_reverse_iterator rend() const;
- reverse_iterator rend();
- //@}
- /**
- @member_group_name{stl, STL interface}
- The supported STL functions are listed here.
- Please see any STL reference (e.g. http://www.cppreference.com/wiki/string/start)
- for their documentation.
- */
- //@{
- wxString& append(const wxString& str, size_t pos, size_t n);
- wxString& append(const wxString& str);
- wxString& append(const char *sz, size_t n);
- wxString& append(const wchar_t *sz, size_t n);
- wxString& append(size_t n, wxUniChar ch);
- wxString& append(const_iterator first, const_iterator last);
- wxString& assign(const wxString& str, size_t pos, size_t n);
- wxString& assign(const wxString& str);
- wxString& assign(const char *sz, size_t n);
- wxString& assign(const wchar_t *sz, size_t n);
- wxString& assign(size_t n, wxUniChar ch);
- wxString& assign(const_iterator first, const_iterator last);
- wxUniChar at(size_t n) const;
- wxUniCharRef at(size_t n);
- void clear();
- size_type capacity() const;
- int compare(const wxString& str) const;
- int compare(size_t nStart, size_t nLen, const wxString& str) const;
- int compare(size_t nStart, size_t nLen,
- const wxString& str, size_t nStart2, size_t nLen2) const;
- int compare(size_t nStart, size_t nLen,
- const char* sz, size_t nCount = npos) const;
- int compare(size_t nStart, size_t nLen,
- const wchar_t* sz, size_t nCount = npos) const;
- wxCStrData data() const;
- bool empty() const;
- wxString& erase(size_type pos = 0, size_type n = npos);
- iterator erase(iterator first, iterator last);
- iterator erase(iterator first);
- size_t find(const wxString& str, size_t nStart = 0) const;
- size_t find(const char* sz, size_t nStart = 0, size_t n = npos) const;
- size_t find(const wchar_t* sz, size_t nStart = 0, size_t n = npos) const;
- size_t find(wxUniChar ch, size_t nStart = 0) const;
- size_t find_first_of(const char* sz, size_t nStart = 0) const;
- size_t find_first_of(const wchar_t* sz, size_t nStart = 0) const;
- size_t find_first_of(const char* sz, size_t nStart, size_t n) const;
- size_t find_first_of(const wchar_t* sz, size_t nStart, size_t n) const;
- size_t find_first_of(wxUniChar c, size_t nStart = 0) const;
- size_t find_last_of (const wxString& str, size_t nStart = npos) const;
- size_t find_last_of (const char* sz, size_t nStart = npos) const;
- size_t find_last_of (const wchar_t* sz, size_t nStart = npos) const;
- size_t find_last_of(const char* sz, size_t nStart, size_t n) const;
- size_t find_last_of(const wchar_t* sz, size_t nStart, size_t n) const;
- size_t find_last_of(wxUniChar c, size_t nStart = npos) const;
- size_t find_first_not_of(const wxString& str, size_t nStart = 0) const;
- size_t find_first_not_of(const char* sz, size_t nStart = 0) const;
- size_t find_first_not_of(const wchar_t* sz, size_t nStart = 0) const;
- size_t find_first_not_of(const char* sz, size_t nStart, size_t n) const;
- size_t find_first_not_of(const wchar_t* sz, size_t nStart, size_t n) const;
- size_t find_first_not_of(wxUniChar ch, size_t nStart = 0) const;
- size_t find_last_not_of(const wxString& str, size_t nStart = npos) const;
- size_t find_last_not_of(const char* sz, size_t nStart = npos) const;
- size_t find_last_not_of(const wchar_t* sz, size_t nStart = npos) const;
- size_t find_last_not_of(const char* sz, size_t nStart, size_t n) const;
- size_t find_last_not_of(const wchar_t* sz, size_t nStart, size_t n) const;
- wxString& insert(size_t nPos, const wxString& str);
- wxString& insert(size_t nPos, const wxString& str, size_t nStart, size_t n);
- wxString& insert(size_t nPos, const char *sz, size_t n);
- wxString& insert(size_t nPos, const wchar_t *sz, size_t n);
- wxString& insert(size_t nPos, size_t n, wxUniChar ch);
- iterator insert(iterator it, wxUniChar ch);
- void insert(iterator it, const_iterator first, const_iterator last);
- void insert(iterator it, size_type n, wxUniChar ch);
- size_t length() const;
- size_type max_size() const;
- void reserve(size_t sz);
- void resize(size_t nSize, wxUniChar ch = '\0');
- wxString& replace(size_t nStart, size_t nLen, const wxString& str);
- wxString& replace(size_t nStart, size_t nLen, size_t nCount, wxUniChar ch);
- wxString& replace(size_t nStart, size_t nLen,
- const wxString& str, size_t nStart2, size_t nLen2);
- wxString& replace(size_t nStart, size_t nLen,
- const char* sz, size_t nCount);
- wxString& replace(size_t nStart, size_t nLen,
- const wchar_t* sz, size_t nCount);
- wxString& replace(size_t nStart, size_t nLen,
- const wxString& s, size_t nCount);
- wxString& replace(iterator first, iterator last, const wxString& s);
- wxString& replace(iterator first, iterator last, const char* s, size_type n);
- wxString& replace(iterator first, iterator last, const wchar_t* s, size_type n);
- wxString& replace(iterator first, iterator last, size_type n, wxUniChar ch);
- wxString& replace(iterator first, iterator last,
- const_iterator first1, const_iterator last1);
- wxString& replace(iterator first, iterator last,
- const char *first1, const char *last1);
- wxString& replace(iterator first, iterator last,
- const wchar_t *first1, const wchar_t *last1);
- size_t rfind(const wxString& str, size_t nStart = npos) const;
- size_t rfind(const char* sz, size_t nStart = npos, size_t n = npos) const;
- size_t rfind(const wchar_t* sz, size_t nStart = npos, size_t n = npos) const;
- size_t rfind(wxUniChar ch, size_t nStart = npos) const;
- size_type size() const;
- wxString substr(size_t nStart = 0, size_t nLen = npos) const;
- void swap(wxString& str);
- //@}
- // STATIC FUNCTIONS
- // Keep these functions separated from the other groups or Doxygen gets confused
- // -----------------------------------------------------------------------------
- /**
- An 'invalid' value for string index
- */
- static const size_t npos;
- /**
- This static function returns the string containing the result of calling
- Printf() with the passed parameters on it.
- @see FormatV(), Printf()
- */
- static wxString Format(const wxString& format, ...);
- /**
- This static function returns the string containing the result of calling
- PrintfV() with the passed parameters on it.
- @see Format(), PrintfV()
- */
- static wxString FormatV(const wxString& format, va_list argptr);
- //@{
- /**
- Converts given buffer of binary data from 8-bit string to wxString. In
- Unicode build, the string is interpreted as being in ISO-8859-1
- encoding. The version without @e len parameter takes NUL-terminated
- data.
- This is a convenience method useful when storing binary data in
- wxString. It should be used @em only for that purpose and only in
- conjunction with To8BitData(). Use mb_str() for conversion of character
- data to known encoding.
- @since 2.8.4
- @see wxString::To8BitData()
- */
- static wxString From8BitData(const char* buf, size_t len);
- static wxString From8BitData(const char* buf);
- //@}
- //@{
- /**
- Converts the string or character from an ASCII, 7-bit form
- to the native wxString representation.
- */
- static wxString FromAscii(const char* s);
- static wxString FromAscii(const unsigned char* s);
- static wxString FromAscii(const char* s, size_t len);
- static wxString FromAscii(const unsigned char* s, size_t len);
- static wxString FromAscii(char c);
- //@}
- /**
- Returns a string with the textual representation of the number in C
- locale.
- Unlike FromDouble() the string returned by this function always uses
- the period character as decimal separator, independently of the current
- locale. Otherwise its behaviour is identical to the other function.
- @since 2.9.1
- @see ToCDouble()
- */
- static wxString FromCDouble(double val, int precision = -1);
- /**
- Returns a string with the textual representation of the number.
- For the default value of @a precision, this function behaves as a
- simple wrapper for @code wxString::Format("%g", val) @endcode. If @a
- precision is positive (or zero), the @c %.Nf format is used with the
- given precision value.
- Notice that the string returned by this function uses the decimal
- separator appropriate for the current locale, e.g. @c "," and not a
- period in French locale. Use FromCDouble() if this is unwanted.
- @param val
- The value to format.
- @param precision
- The number of fractional digits to use in or -1 to use the most
- appropriate format. This parameter is new in wxWidgets 2.9.2.
- @since 2.9.1
- @see ToDouble()
- */
- static wxString FromDouble(double val, int precision = -1);
- //@{
- /**
- Converts C string encoded in UTF-8 to wxString.
- If @a s is not a valid UTF-8 string, an empty string is returned.
- Notice that when using UTF-8 wxWidgets build there is a more efficient
- alternative to this function called FromUTF8Unchecked() which, unlike
- this one, doesn't check that the input string is valid.
- @since 2.8.4
- */
- static wxString FromUTF8(const char* s);
- static wxString FromUTF8(const char* s, size_t len);
- //@}
- //@{
- /**
- Converts C string encoded in UTF-8 to wxString without checking its
- validity.
- This method assumes that @a s is a valid UTF-8 sequence and doesn't do
- any validation (although an assert failure is triggered in debug builds
- if the string is invalid). Only use it if you are absolutely sure that
- @a s is a correct UTF-8 string (e.g. because it comes from another
- library using UTF-8) and if the performance matters, otherwise use
- slower (in UTF-8 build) but safer FromUTF8(). Passing a bad UTF-8
- string to this function will result in creating a corrupted wxString
- and all the subsequent operations on it will be undefined.
- @since 2.8.9
- */
- static wxString FromUTF8Unchecked(const char* s);
- static wxString FromUTF8Unchecked(const char* s, size_t len);
- //@}
- };
- //@{
- /**
- Comparison operator for string types.
- */
- inline bool operator==(const wxString& s1, const wxString& s2);
- inline bool operator!=(const wxString& s1, const wxString& s2);
- inline bool operator< (const wxString& s1, const wxString& s2);
- inline bool operator> (const wxString& s1, const wxString& s2);
- inline bool operator<=(const wxString& s1, const wxString& s2);
- inline bool operator>=(const wxString& s1, const wxString& s2);
- inline bool operator==(const wxString& s1, const wxCStrData& s2);
- inline bool operator==(const wxCStrData& s1, const wxString& s2);
- inline bool operator!=(const wxString& s1, const wxCStrData& s2);
- inline bool operator!=(const wxCStrData& s1, const wxString& s2);
- inline bool operator==(const wxString& s1, const wxWCharBuffer& s2);
- inline bool operator==(const wxWCharBuffer& s1, const wxString& s2);
- inline bool operator!=(const wxString& s1, const wxWCharBuffer& s2);
- inline bool operator!=(const wxWCharBuffer& s1, const wxString& s2);
- inline bool operator==(const wxString& s1, const wxCharBuffer& s2);
- inline bool operator==(const wxCharBuffer& s1, const wxString& s2);
- inline bool operator!=(const wxString& s1, const wxCharBuffer& s2);
- inline bool operator!=(const wxCharBuffer& s1, const wxString& s2);
- //@}
- //@{
- /**
- Comparison operators char types.
- */
- inline bool operator==(const wxUniChar& c, const wxString& s);
- inline bool operator==(const wxUniCharRef& c, const wxString& s);
- inline bool operator==(char c, const wxString& s);
- inline bool operator==(wchar_t c, const wxString& s);
- inline bool operator==(int c, const wxString& s);
- inline bool operator==(const wxString& s, const wxUniChar& c);
- inline bool operator==(const wxString& s, const wxUniCharRef& c);
- inline bool operator==(const wxString& s, char c);
- inline bool operator==(const wxString& s, wchar_t c);
- inline bool operator!=(const wxUniChar& c, const wxString& s);
- inline bool operator!=(const wxUniCharRef& c, const wxString& s);
- inline bool operator!=(char c, const wxString& s);
- inline bool operator!=(wchar_t c, const wxString& s);
- inline bool operator!=(int c, const wxString& s);
- inline bool operator!=(const wxString& s, const wxUniChar& c);
- inline bool operator!=(const wxString& s, const wxUniCharRef& c);
- inline bool operator!=(const wxString& s, char c);
- inline bool operator!=(const wxString& s, wchar_t c);
- //@}
- /**
- The global wxString instance of an empty string.
- Used extensively in the entire wxWidgets API.
- */
- wxString wxEmptyString;
- /**
- @class wxStringBufferLength
- This tiny class allows you to conveniently access the wxString internal buffer
- as a writable pointer without any risk of forgetting to restore the string to
- the usable state later, and allows the user to set the internal length of the string.
- For example, assuming you have a low-level OS function called
- @c "int GetMeaningOfLifeAsString(char *)" copying the value in the provided
- buffer (which must be writable, of course), and returning the actual length
- of the string, you might call it like this:
- @code
- wxString theAnswer;
- wxStringBufferLength theAnswerBuffer(theAnswer, 1024);
- int nLength = GetMeaningOfLifeAsString(theAnswerBuffer);
- theAnswerBuffer.SetLength(nLength);
- if ( theAnswer != "42" )
- wxLogError("Something is very wrong!");
- @endcode
- Note that the exact usage of this depends on whether or not wxUSE_STL is
- enabled. If wxUSE_STL is enabled, wxStringBuffer creates a separate empty
- character buffer, and if wxUSE_STL is disabled, it uses GetWriteBuf() from
- wxString, keeping the same buffer wxString uses intact. In other words,
- relying on wxStringBuffer containing the old wxString data is not a good
- idea if you want to build your program both with and without wxUSE_STL.
- Note that wxStringBuffer::SetLength @b must be called before
- wxStringBufferLength destructs.
- @library{wxbase}
- @category{data}
- */
- class wxStringBufferLength
- {
- public:
- /**
- Constructs a writable string buffer object associated with the given string
- and containing enough space for at least @a len characters.
- Basically, this is equivalent to calling wxString::GetWriteBuf and
- saving the result.
- */
- wxStringBufferLength(const wxString& str, size_t len);
- /**
- Restores the string passed to the constructor to the usable state by calling
- wxString::UngetWriteBuf on it.
- */
- ~wxStringBufferLength();
- /**
- Sets the internal length of the string referred to by wxStringBufferLength to
- @a nLength characters.
- Must be called before wxStringBufferLength destructs.
- */
- void SetLength(size_t nLength);
- /**
- Returns the writable pointer to a buffer of the size at least equal to the
- length specified in the constructor.
- */
- wxChar* operator wxChar *();
- };
- /**
- @class wxStringBuffer
- This tiny class allows you to conveniently access the wxString internal buffer
- as a writable pointer without any risk of forgetting to restore the string
- to the usable state later.
- For example, assuming you have a low-level OS function called
- @c "GetMeaningOfLifeAsString(char *)" returning the value in the provided
- buffer (which must be writable, of course) you might call it like this:
- @code
- wxString theAnswer;
- GetMeaningOfLifeAsString(wxStringBuffer(theAnswer, 1024));
- if ( theAnswer != "42" )
- wxLogError("Something is very wrong!");
- @endcode
- Note that the exact usage of this depends on whether or not @c wxUSE_STL is
- enabled. If @c wxUSE_STL is enabled, wxStringBuffer creates a separate empty
- character buffer, and if @c wxUSE_STL is disabled, it uses GetWriteBuf() from
- wxString, keeping the same buffer wxString uses intact. In other words,
- relying on wxStringBuffer containing the old wxString data is not a good
- idea if you want to build your program both with and without @c wxUSE_STL.
- @library{wxbase}
- @category{data}
- */
- class wxStringBuffer
- {
- public:
- /**
- Constructs a writable string buffer object associated with the given string
- and containing enough space for at least @a len characters.
- Basically, this is equivalent to calling wxString::GetWriteBuf() and
- saving the result.
- */
- wxStringBuffer(const wxString& str, size_t len);
- /**
- Restores the string passed to the constructor to the usable state by calling
- wxString::UngetWriteBuf() on it.
- */
- ~wxStringBuffer();
- /**
- Returns the writable pointer to a buffer of the size at least equal to the
- length specified in the constructor.
- */
- wxStringCharType* operator wxStringCharType *();
- };
- /** @addtogroup group_funcmacro_string */
- //@{
- /**
- Allows to extend a function with the signature:
- @code bool SomeFunc(const wxUniChar& c) @endcode
- which operates on a single character, to an entire wxString.
- E.g. if you want to check if an entire string contains only digits,
- you can do:
- @code
- if (wxStringCheck<wxIsdigit>(myString))
- ... // the entire string contains only digits!
- else
- ... // at least one character of myString is not a digit
- @endcode
- @return @true if the given function returns a non-zero value for all
- characters of the @a val string.
- */
- template<bool (T)(const wxUniChar& c)>
- inline bool wxStringCheck(const wxString& val);
- //@}
|