]> git.saurik.com Git - wxWidgets.git/blobdiff - include/wx/string.h
moved XML classes to the core
[wxWidgets.git] / include / wx / string.h
index 4b02daaeb17eff8dcb5f8cdef07759bed2429834..a1840aa728c305f705b34945158103ba8b9a81fb 100644 (file)
@@ -121,7 +121,15 @@ inline size_t Strlen(const char *psz)
 // portable strcasecmp/_stricmp
 inline int Stricmp(const char *psz1, const char *psz2)
 {
-#if defined(__VISUALC__) || ( defined(__MWERKS__) && defined(__INTEL__) )
+#if defined(__VISUALC__) && defined(__WXWINCE__)
+  register char c1, c2;
+  do {
+    c1 = tolower(*psz1++);
+    c2 = tolower(*psz2++);
+  } while ( c1 && (c1 == c2) );
+
+  return c1 - c2;
+#elif defined(__VISUALC__) || ( defined(__MWERKS__) && defined(__INTEL__) )
   return _stricmp(psz1, psz2);
 #elif defined(__SC__)
   return _stricmp(psz1, psz2);
@@ -1023,6 +1031,62 @@ public:
 // wxStringBuffer: a tiny class allowing to get a writable pointer into string
 // ----------------------------------------------------------------------------
 
+#if wxUSE_STL
+
+class WXDLLIMPEXP_BASE wxStringBuffer
+{
+public:
+    wxStringBuffer(wxString& str, size_t lenWanted = 1024)
+        : m_str(str), m_buf(lenWanted), m_len(lenWanted)
+        { }
+
+    ~wxStringBuffer() { m_str.assign(m_buf.data(), wxStrlen(m_buf.data())); }
+
+    operator wxChar*() { return m_buf.data(); }
+
+private:
+    wxString& m_str;
+#if wxUSE_UNICODE
+    wxWCharBuffer m_buf;
+#else
+    wxCharBuffer m_buf;
+#endif
+    size_t m_len;
+
+    DECLARE_NO_COPY_CLASS(wxStringBuffer)
+};
+
+class WXDLLIMPEXP_BASE wxStringBufferLength
+{
+public:
+    wxStringBufferLength(wxString& str, size_t lenWanted = 1024)
+        : m_str(str), m_buf(lenWanted), m_len(0), m_lenSet(false)
+        { }
+
+    ~wxStringBufferLength()
+    {
+        wxASSERT(m_lenSet);
+        m_str.assign(m_buf.data(), m_len);
+    }
+
+    operator wxChar*() { return m_buf.data(); }
+    void SetLength(size_t length) { m_len = length; m_lenSet = true; }
+
+private:
+    wxString& m_str;
+#if wxUSE_UNICODE
+    wxWCharBuffer m_buf;
+#else
+    wxCharBuffer  m_buf;
+#endif
+    size_t        m_len;
+    bool          m_lenSet;
+
+    DECLARE_NO_COPY_CLASS(wxStringBufferLength)
+};
+
+#else // if !wxUSE_STL
+
 class WXDLLIMPEXP_BASE wxStringBuffer
 {
 public:
@@ -1041,6 +1105,33 @@ private:
     DECLARE_NO_COPY_CLASS(wxStringBuffer)
 };
 
+class WXDLLIMPEXP_BASE wxStringBufferLength
+{
+public:
+    wxStringBufferLength(wxString& str, size_t lenWanted = 1024)
+        : m_str(str), m_buf(NULL), m_len(0), m_lenSet(false)
+        { m_buf = m_str.GetWriteBuf(lenWanted); }
+
+    ~wxStringBufferLength()
+    {
+        wxASSERT(m_lenSet);
+        m_str.UngetWriteBuf(m_len);
+    }
+
+    operator wxChar*() const { return m_buf; }
+    void SetLength(size_t length) { m_len = length; m_lenSet = true; }
+
+private:
+    wxString& m_str;
+    wxChar   *m_buf;
+    size_t    m_len;
+    bool      m_lenSet;
+
+    DECLARE_NO_COPY_CLASS(wxStringBufferLength)
+};
+
+#endif // !wxUSE_STL
+
 // ---------------------------------------------------------------------------
 // wxString comparison functions: operator versions are always case sensitive
 // ---------------------------------------------------------------------------