X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/7357f981980bad5b272d1dfbf93ec494ba400c3d..819451b6c76bdcaf5fd8865479209859511aa986:/include/wx/string.h diff --git a/include/wx/string.h b/include/wx/string.h index b9319c6b7a..b4a6fa1df7 100644 --- a/include/wx/string.h +++ b/include/wx/string.h @@ -6,7 +6,7 @@ // Created: 29/01/98 // RCS-ID: $Id$ // Copyright: (c) 1998 Vadim Zeitlin -// Licence: wxWindows license +// Licence: wxWindows licence /////////////////////////////////////////////////////////////////////////////// /* @@ -18,7 +18,7 @@ #ifndef _WX_WXSTRINGH__ #define _WX_WXSTRINGH__ -#ifdef __GNUG__ +#if defined(__GNUG__) && !defined(__APPLE__) #pragma interface "string.h" #endif @@ -165,17 +165,6 @@ inline int Stricmp(const char *psz1, const char *psz2) #endif // OS/compiler } -// wxSnprintf() is like snprintf() if it's available and sprintf() (always -// available, but dangerous!) if not -extern int WXDLLEXPORT wxSnprintf(wxChar *buf, size_t len, - const wxChar *format, - ...) ATTRIBUTE_PRINTF_3; - -// and wxVsnprintf() is like vsnprintf() or vsprintf() -extern int WXDLLEXPORT wxVsnprintf(wxChar *buf, size_t len, - const wxChar *format, - va_list argptr); - // return an empty wxString class WXDLLEXPORT wxString; // not yet defined inline const wxString& wxGetEmptyString() { return *(wxString *)&wxEmptyString; } @@ -269,7 +258,7 @@ private: bool AssignCopy(size_t, const wxChar *); // append a (sub)string - bool ConcatSelf(int nLen, const wxChar *src); + bool ConcatSelf(size_t nLen, const wxChar *src); // functions called before writing to the string: they copy it if there // are other references to our data (should be the only owner when writing) @@ -325,7 +314,7 @@ public: // from multibyte string // (NB: nLength is right now number of Unicode characters, not // characters in psz! So try not to use it yet!) - wxString(const char *psz, wxMBConv& conv = wxConvLibc, size_t nLength = wxSTRING_MAXLEN); + wxString(const char *psz, wxMBConv& conv, size_t nLength = wxSTRING_MAXLEN); // from wxWCharBuffer (i.e. return from wxGetString) wxString(const wxWCharBuffer& psz) { InitWith(psz, 0, wxSTRING_MAXLEN); } @@ -457,14 +446,31 @@ public: // implicit conversion to C string operator const wxChar*() const { return m_pchData; } + // explicit conversion to C string (use this with printf()!) const wxChar* c_str() const { return m_pchData; } - // identical to c_str() + // identical to c_str(), for wxWin 1.6x compatibility const wxChar* wx_str() const { return m_pchData; } - // identical to c_str() + // identical to c_str(), for MFC compatibility const wxChar* GetData() const { return m_pchData; } - // conversions with (possible) format convertions: have to return a + // conversion to/from plain (i.e. 7 bit) ASCII: this is useful for + // converting numbers or strings which are certain not to contain special + // chars (typically system functions, X atoms, environment variables etc.) + // + // the behaviour of these functions with the strings containing anything + // else than 7 bit ASCII characters is undefined, use at your own risk. +#if wxUSE_UNICODE + static wxString FromAscii(const char *ascii); // string + static wxString FromAscii(const char ascii); // char + const wxCharBuffer ToAscii() const; +#else // ANSI + static wxString FromAscii(const char *ascii) { return wxString( ascii ); } + static wxString FromAscii(const char ascii) { return wxString( ascii ); } + const char *ToAscii() const { return c_str(); } +#endif // Unicode/!Unicode + + // conversions with (possible) format conversions: have to return a // buffer with temporary data // // the functions defined (in either Unicode or ANSI) mode are mb_str() to @@ -797,6 +803,8 @@ public: // standard types typedef wxChar value_type; + typedef size_t size_type; + typedef value_type *iterator; typedef const value_type *const_iterator; // an 'invalid' value for string index @@ -829,7 +837,7 @@ public: // returns true if the string is empty bool empty() const { return IsEmpty(); } // inform string about planned change in size - void reserve(size_t size) { Alloc(size); } + void reserve(size_t sz) { Alloc(sz); } // lib.string.access // return the character at position n @@ -842,6 +850,11 @@ public: // position one after the last valid one const_iterator end() const { return wx_str() + length(); } + // first valid index position + iterator begin() { CopyBeforeWrite(); return m_pchData; } + // position one after the last valid one + iterator end() { CopyBeforeWrite(); return m_pchData + length(); } + // lib.string.modifiers // append a string wxString& append(const wxString& str) @@ -1146,20 +1159,20 @@ public: class WXDLLEXPORT wxStringBuffer { - DECLARE_NO_COPY_CLASS(wxStringBuffer) - public: wxStringBuffer(wxString& str, size_t lenWanted = 1024) : m_str(str), m_buf(NULL) { m_buf = m_str.GetWriteBuf(lenWanted); } - + ~wxStringBuffer() { m_str.UngetWriteBuf(); } - + operator wxChar*() const { return m_buf; } - + private: wxString& m_str; wxChar *m_buf; + + DECLARE_NO_COPY_CLASS(wxStringBuffer) }; // --------------------------------------------------------------------------- @@ -1255,7 +1268,7 @@ inline wxString operator+(const wxCharBuffer& buf, const wxString& string) #if defined(wxSTD_STRING_COMPATIBILITY) && wxUSE_STD_IOSTREAM -#include "wx/ioswrap.h" +#include "wx/iosfwrap.h" WXDLLEXPORT wxSTD istream& operator>>(wxSTD istream&, wxString&); WXDLLEXPORT wxSTD ostream& operator<<(wxSTD ostream&, const wxString&);