]> git.saurik.com Git - wxWidgets.git/blobdiff - include/wx/string.h
Applied patch [ 1382552 ] Fixes GDI-ressource leak in wxStaticBitmap
[wxWidgets.git] / include / wx / string.h
index d39b0c9188e0bd29b5220c03089726b164ac98e0..ac55f5c5f968f694d2bfdc77b39a9b8f9e0cdc14 100644 (file)
@@ -187,6 +187,7 @@ inline int Stricmp(const char *psz1, const char *psz2)
     // we don't need an extra ctor from std::string when copy ctor already does
     // the work
     #undef wxUSE_STD_STRING
     // we don't need an extra ctor from std::string when copy ctor already does
     // the work
     #undef wxUSE_STD_STRING
+    #define wxUSE_STD_STRING 0
 
     #if (defined(__GNUG__) && (__GNUG__ < 3)) || \
         (defined(_MSC_VER) && (_MSC_VER <= 1200))
 
     #if (defined(__GNUG__) && (__GNUG__ < 3)) || \
         (defined(_MSC_VER) && (_MSC_VER <= 1200))
@@ -261,7 +262,7 @@ protected:
     // initializes the string to the empty value (must be called only from
     // ctors, use Reinit() otherwise)
   void Init() { m_pchData = (wxChar *)wxEmptyString; }
     // initializes the string to the empty value (must be called only from
     // ctors, use Reinit() otherwise)
   void Init() { m_pchData = (wxChar *)wxEmptyString; }
-    // initializaes the string with (a part of) C-string
+    // initializes the string with (a part of) C-string
   void InitWith(const wxChar *psz, size_t nPos = 0, size_t nLen = npos);
     // as Init, but also frees old data
   void Reinit() { GetStringData()->Unlock(); Init(); }
   void InitWith(const wxChar *psz, size_t nPos = 0, size_t nLen = npos);
     // as Init, but also frees old data
   void Reinit() { GetStringData()->Unlock(); Init(); }
@@ -670,7 +671,10 @@ public:
   wxString(const wxWCharBuffer& psz) : wxStringBase(psz.data()) { }
 #else // ANSI
     // from C string (for compilers using unsigned char)
   wxString(const wxWCharBuffer& psz) : wxStringBase(psz.data()) { }
 #else // ANSI
     // from C string (for compilers using unsigned char)
-  wxString(const unsigned char* psz, size_t nLength = npos)
+  wxString(const unsigned char* psz)
+      : wxStringBase((const char*)psz) { }
+    // from part of C string (for compilers using unsigned char)
+  wxString(const unsigned char* psz, size_t nLength)
       : wxStringBase((const char*)psz, nLength) { }
 
 #if wxUSE_WCHAR_T
       : wxStringBase((const char*)psz, nLength) { }
 
 #if wxUSE_WCHAR_T
@@ -930,16 +934,19 @@ public:
     { *this = str + *this; return *this; }
 
     // non-destructive concatenation
     { *this = str + *this; return *this; }
 
     // non-destructive concatenation
-      //
-  friend wxString WXDLLIMPEXP_BASE operator+(const wxString& string1,  const wxString& string2);
-      //
+      // two strings
+  friend wxString WXDLLIMPEXP_BASE operator+(const wxString& string1,
+                                             const wxString& string2);
+      // string with a single char
   friend wxString WXDLLIMPEXP_BASE operator+(const wxString& string, wxChar ch);
   friend wxString WXDLLIMPEXP_BASE operator+(const wxString& string, wxChar ch);
-      //
+      // char with a string
   friend wxString WXDLLIMPEXP_BASE operator+(wxChar ch, const wxString& string);
   friend wxString WXDLLIMPEXP_BASE operator+(wxChar ch, const wxString& string);
-      //
-  friend wxString WXDLLIMPEXP_BASE operator+(const wxString& string, const wxChar *psz);
-      //
-  friend wxString WXDLLIMPEXP_BASE operator+(const wxChar *psz, const wxString& string);
+      // string with C string
+  friend wxString WXDLLIMPEXP_BASE operator+(const wxString& string,
+                                             const wxChar *psz);
+      // C string with string
+  friend wxString WXDLLIMPEXP_BASE operator+(const wxChar *psz,
+                                             const wxString& string);
 
   // stream-like functions
       // insert an int into string
 
   // stream-like functions
       // insert an int into string
@@ -954,6 +961,20 @@ public:
       // insert an unsigned long into string
   wxString& operator<<(unsigned long ul)
     { return (*this) << Format(_T("%lu"), ul); }
       // insert an unsigned long into string
   wxString& operator<<(unsigned long ul)
     { return (*this) << Format(_T("%lu"), ul); }
+#if defined wxLongLong_t && !defined wxLongLongIsLong
+      // insert a long long if they exist and aren't longs
+  wxString& operator<<(wxLongLong_t ll)
+    {
+      const wxChar *fmt = _T("%") wxLongLongFmtSpec _T("d");
+      return (*this) << Format(fmt, ll);
+    }
+      // insert an unsigned long long
+  wxString& operator<<(wxULongLong_t ull)
+    {
+      const wxChar *fmt = _T("%") wxLongLongFmtSpec _T("u");
+      return (*this) << Format(fmt , ull);
+    }
+#endif
       // insert a float into string
   wxString& operator<<(float f)
     { return (*this) << Format(_T("%f"), f); }
       // insert a float into string
   wxString& operator<<(float f)
     { return (*this) << Format(_T("%f"), f); }
@@ -1057,7 +1078,7 @@ public:
         // convert to a double
     bool ToDouble(double *val) const;
 
         // convert to a double
     bool ToDouble(double *val) const;
 
-  // formated input/output
+  // formatted input/output
     // as sprintf(), returns the number of characters written or < 0 on error
     // (take 'this' into account in attribute parameter count)
   int Printf(const wxChar *pszFormat, ...) ATTRIBUTE_PRINTF_2;
     // as sprintf(), returns the number of characters written or < 0 on error
     // (take 'this' into account in attribute parameter count)
   int Printf(const wxChar *pszFormat, ...) ATTRIBUTE_PRINTF_2;
@@ -1274,6 +1295,17 @@ public:
     { return (wxString&)wxStringBase::operator+=(ch); }
 };
 
     { return (wxString&)wxStringBase::operator+=(ch); }
 };
 
+// notice that even though for many compilers the friend declarations above are
+// enough, from the point of view of C++ standard we must have the declarations
+// here as friend ones are not injected in the enclosing namespace and without
+// them the code fails to compile with conforming compilers such as xlC or g++4
+wxString WXDLLIMPEXP_BASE operator+(const wxString& string1,  const wxString& string2);
+wxString WXDLLIMPEXP_BASE operator+(const wxString& string, wxChar ch);
+wxString WXDLLIMPEXP_BASE operator+(wxChar ch, const wxString& string);
+wxString WXDLLIMPEXP_BASE operator+(const wxString& string, const wxChar *psz);
+wxString WXDLLIMPEXP_BASE operator+(const wxChar *psz, const wxString& string);
+
+
 // define wxArrayString, for compatibility
 #if WXWIN_COMPATIBILITY_2_4 && !wxUSE_STL
     #include "wx/arrstr.h"
 // define wxArrayString, for compatibility
 #if WXWIN_COMPATIBILITY_2_4 && !wxUSE_STL
     #include "wx/arrstr.h"