merged 2.2 branch
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@7748 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
		@@ -66,7 +66,6 @@
 | 
			
		||||
#endif // AIX
 | 
			
		||||
 | 
			
		||||
#include "wx/defs.h"        // everybody should include this
 | 
			
		||||
#include "wx/debug.h"       // for wxASSERT()
 | 
			
		||||
#include "wx/wxchar.h"      // for wxChar
 | 
			
		||||
#include "wx/buffer.h"      // for wxCharBuffer
 | 
			
		||||
#include "wx/strconv.h"     // for wxConvertXXX() macros and wxMBConv classes
 | 
			
		||||
@@ -205,6 +204,12 @@ struct WXDLLEXPORT wxStringData
 | 
			
		||||
 | 
			
		||||
  // lock/unlock
 | 
			
		||||
  void  Lock()   { if ( !IsEmpty() ) nRefs++;                    }
 | 
			
		||||
 | 
			
		||||
  // VC++ will refuse to inline this function but profiling shows that it
 | 
			
		||||
  // is wrong
 | 
			
		||||
#if defined(__VISUALC__) && (__VISUALC__ >= 1200)
 | 
			
		||||
  __forceinline
 | 
			
		||||
#endif
 | 
			
		||||
  void  Unlock() { if ( !IsEmpty() && --nRefs == 0) free(this);  }
 | 
			
		||||
 | 
			
		||||
  // if we had taken control over string memory (GetWriteBuf), it's
 | 
			
		||||
@@ -315,6 +320,8 @@ public:
 | 
			
		||||
    // (default value of wxSTRING_MAXLEN means take all the string)
 | 
			
		||||
  wxString(const wxChar *psz, size_t nLength = wxSTRING_MAXLEN)
 | 
			
		||||
    { InitWith(psz, 0, nLength); }
 | 
			
		||||
  wxString(const wxChar *psz, wxMBConv& WXUNUSED(conv), size_t nLength = wxSTRING_MAXLEN)
 | 
			
		||||
    { InitWith(psz, 0, nLength); }
 | 
			
		||||
 | 
			
		||||
#if wxUSE_UNICODE
 | 
			
		||||
    // from multibyte string
 | 
			
		||||
@@ -328,13 +335,10 @@ public:
 | 
			
		||||
    // from C string (for compilers using unsigned char)
 | 
			
		||||
  wxString(const unsigned char* psz, size_t nLength = wxSTRING_MAXLEN)
 | 
			
		||||
    { InitWith((const char*)psz, 0, nLength); }
 | 
			
		||||
    // from multibyte string
 | 
			
		||||
  wxString(const char *psz, wxMBConv& WXUNUSED(conv) , size_t nLength = wxSTRING_MAXLEN)
 | 
			
		||||
    { InitWith(psz, 0, nLength); }
 | 
			
		||||
 | 
			
		||||
#if wxUSE_WCHAR_T
 | 
			
		||||
    // from wide (Unicode) string
 | 
			
		||||
  wxString(const wchar_t *pwz);
 | 
			
		||||
  wxString(const wchar_t *pwz, wxMBConv& conv = wxConvLibc);
 | 
			
		||||
#endif // !wxUSE_WCHAR_T
 | 
			
		||||
 | 
			
		||||
    // from wxCharBuffer
 | 
			
		||||
@@ -423,18 +427,30 @@ public:
 | 
			
		||||
    operator const wxChar*() const { return m_pchData; }
 | 
			
		||||
    // explicit conversion to C string (use this with printf()!)
 | 
			
		||||
    const wxChar* c_str()   const { return m_pchData; }
 | 
			
		||||
    // (and this with [wx]Printf()!)
 | 
			
		||||
    // identical to c_str()
 | 
			
		||||
    const wxChar* wx_str()  const { return m_pchData; }
 | 
			
		||||
    // identical to c_str()
 | 
			
		||||
    const wxChar* GetData() const { return m_pchData; }
 | 
			
		||||
 | 
			
		||||
    // conversions with (possible) format convertions: have to return a
 | 
			
		||||
    // buffer with temporary data
 | 
			
		||||
    //
 | 
			
		||||
    // the functions defined (in either Unicode or ANSI) mode are mb_str() to
 | 
			
		||||
    // return an ANSI (multibyte) string, wc_str() to return a wide string and
 | 
			
		||||
    // fn_str() to return a string which should be used with the OS APIs
 | 
			
		||||
    // accepting the file names. The return value is always the same, but the
 | 
			
		||||
    // type differs because a function may either return pointer to the buffer
 | 
			
		||||
    // directly or have to use intermediate buffer for translation.
 | 
			
		||||
#if wxUSE_UNICODE
 | 
			
		||||
    const wxCharBuffer mb_str(wxMBConv& conv = wxConvLibc) const { return conv.cWC2MB(m_pchData); }
 | 
			
		||||
    const wxCharBuffer mb_str(wxMBConv& conv = wxConvLibc) const
 | 
			
		||||
        { return conv.cWC2MB(m_pchData); }
 | 
			
		||||
 | 
			
		||||
    const wxWX2MBbuf mbc_str() const { return mb_str(*wxConvCurrent); }
 | 
			
		||||
 | 
			
		||||
    const wxChar* wc_str(wxMBConv& WXUNUSED(conv) = wxConvLibc) const { return m_pchData; }
 | 
			
		||||
    const wxChar* wc_str() const { return m_pchData; }
 | 
			
		||||
 | 
			
		||||
    // for compatibility with !wxUSE_UNICODE version
 | 
			
		||||
    const wxChar* wc_str(wxMBConv& WXUNUSED(conv)) const { return m_pchData; }
 | 
			
		||||
 | 
			
		||||
#if wxMBFILES
 | 
			
		||||
    const wxCharBuffer fn_str() const { return mb_str(wxConvFile); }
 | 
			
		||||
@@ -442,17 +458,18 @@ public:
 | 
			
		||||
    const wxChar* fn_str() const { return m_pchData; }
 | 
			
		||||
#endif // wxMBFILES/!wxMBFILES
 | 
			
		||||
#else // ANSI
 | 
			
		||||
#if wxUSE_MULTIBYTE
 | 
			
		||||
    const wxChar* mb_str(wxMBConv& WXUNUSED(conv) = wxConvLibc) const
 | 
			
		||||
        { return m_pchData; }
 | 
			
		||||
    const wxWX2MBbuf mbc_str() const { return mb_str(*wxConvCurrent); }
 | 
			
		||||
#else // !mmultibyte
 | 
			
		||||
    const wxChar* mb_str() const { return m_pchData; }
 | 
			
		||||
 | 
			
		||||
    // for compatibility with wxUSE_UNICODE version
 | 
			
		||||
    const wxChar* mb_str(wxMBConv& WXUNUSED(conv)) const { return m_pchData; }
 | 
			
		||||
 | 
			
		||||
    const wxWX2MBbuf mbc_str() const { return mb_str(); }
 | 
			
		||||
#endif // multibyte/!multibyte
 | 
			
		||||
 | 
			
		||||
#if wxUSE_WCHAR_T
 | 
			
		||||
    const wxWCharBuffer wc_str(wxMBConv& conv) const { return conv.cMB2WC(m_pchData); }
 | 
			
		||||
    const wxWCharBuffer wc_str(wxMBConv& conv) const
 | 
			
		||||
        { return conv.cMB2WC(m_pchData); }
 | 
			
		||||
#endif // wxUSE_WCHAR_T
 | 
			
		||||
 | 
			
		||||
    const wxChar* fn_str() const { return m_pchData; }
 | 
			
		||||
#endif // Unicode/ANSI
 | 
			
		||||
 | 
			
		||||
@@ -580,10 +597,15 @@ public:
 | 
			
		||||
      // if nCount = default value)
 | 
			
		||||
  wxString Mid(size_t nFirst, size_t nCount = wxSTRING_MAXLEN) const;
 | 
			
		||||
 | 
			
		||||
    // operator version of Mid()
 | 
			
		||||
      // operator version of Mid()
 | 
			
		||||
  wxString  operator()(size_t start, size_t len) const
 | 
			
		||||
    { return Mid(start, len); }
 | 
			
		||||
 | 
			
		||||
      // check that the tring starts with prefix and return the rest of the
 | 
			
		||||
      // string in the provided pointer if it is not NULL, otherwise return
 | 
			
		||||
      // FALSE
 | 
			
		||||
  bool StartsWith(const wxChar *prefix, wxString *rest = NULL) const;
 | 
			
		||||
 | 
			
		||||
      // get first nCount characters
 | 
			
		||||
  wxString Left(size_t nCount) const;
 | 
			
		||||
      // get last nCount characters
 | 
			
		||||
@@ -994,6 +1016,12 @@ public:
 | 
			
		||||
    // sort array elements using specified comparaison function
 | 
			
		||||
  void Sort(CompareFunction compareFunction);
 | 
			
		||||
 | 
			
		||||
  // comparison
 | 
			
		||||
    // compare two arrays case sensitively
 | 
			
		||||
  bool operator==(const wxArrayString& a) const;
 | 
			
		||||
    // compare two arrays case sensitively
 | 
			
		||||
  bool operator!=(const wxArrayString& a) const { return !(*this == a); }
 | 
			
		||||
 | 
			
		||||
protected:
 | 
			
		||||
  void Copy(const wxArrayString& src);  // copies the contents of another array
 | 
			
		||||
 | 
			
		||||
@@ -1072,11 +1100,19 @@ inline bool operator==(const wxString& s1, const wxWCharBuffer& s2)
 | 
			
		||||
    { return (s1.Cmp((const wchar_t *)s2) == 0); }
 | 
			
		||||
inline bool operator==(const wxWCharBuffer& s1, const wxString& s2)
 | 
			
		||||
    { return (s2.Cmp((const wchar_t *)s1) == 0); }
 | 
			
		||||
inline bool operator!=(const wxString& s1, const wxWCharBuffer& s2)
 | 
			
		||||
    { return (s1.Cmp((const wchar_t *)s2) != 0); }
 | 
			
		||||
inline bool operator!=(const wxWCharBuffer& s1, const wxString& s2)
 | 
			
		||||
    { return (s2.Cmp((const wchar_t *)s1) != 0); }
 | 
			
		||||
#else
 | 
			
		||||
inline bool operator==(const wxString& s1, const wxCharBuffer& s2)
 | 
			
		||||
    { return (s1.Cmp((const char *)s2) == 0); }
 | 
			
		||||
inline bool operator==(const wxCharBuffer& s1, const wxString& s2)
 | 
			
		||||
    { return (s2.Cmp((const char *)s1) == 0); }
 | 
			
		||||
inline bool operator!=(const wxString& s1, const wxCharBuffer& s2)
 | 
			
		||||
    { return (s1.Cmp((const char *)s2) != 0); }
 | 
			
		||||
inline bool operator!=(const wxCharBuffer& s1, const wxString& s2)
 | 
			
		||||
    { return (s2.Cmp((const char *)s1) != 0); }
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
wxString WXDLLEXPORT operator+(const wxString& string1,  const wxString& string2);
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user