]> git.saurik.com Git - wxWidgets.git/blobdiff - include/wx/string.h
Removed small OGL glitches; added new sample
[wxWidgets.git] / include / wx / string.h
index 1073bbcfe84bec114419cb4186d4809f0b8aa2b9..e997410380c30b10130e72ddbbf57ca7c73cfe78 100644 (file)
 #pragma interface "string.h"
 #endif
 
-/* Dependencies (should be included before this header):
- *         string.h
- *         stdio.h
- *         stdarg.h
- *         limits.h
- */
 #ifdef __WXMAC__
-#include <ctype.h>
+    #include <ctype.h>
 #endif
+
 #include <string.h>
 #include <stdio.h>
 #include <stdarg.h>
 #include <stdlib.h>
 
 #ifndef  WX_PRECOMP
-  #include "wx/defs.h"     // Robert Roebling
+  #include "wx/defs.h"
+
   #ifdef    WXSTRING_IS_WXOBJECT
     #include "wx/object.h"
   #endif
-#endif
+#endif // !PCH
 
 #include "wx/debug.h"
 
@@ -60,7 +56,7 @@
 
 // maximum possible length for a string means "take all string" everywhere
 //  (as sizeof(StringData) is unknown here we substract 100)
-#define   STRING_MAXLEN     (UINT_MAX - 100)
+const unsigned int wxSTRING_MAXLEN = UINT_MAX - 100;
 
 // 'naughty' cast
 #define   WXSTRINGCAST (char *)(const char *)
@@ -83,7 +79,7 @@ inline size_t WXDLLEXPORT Strlen(const char *psz)
 // portable strcasecmp/_stricmp
 inline int WXDLLEXPORT Stricmp(const char *psz1, const char *psz2)
 {
-#if     defined(_MSC_VER)
+#if     defined(__VISUALC__) || defined(__MWERKS__)
   return _stricmp(psz1, psz2);
 #elif     defined(__SC__)
   return _stricmp(psz1, psz2);
@@ -210,7 +206,7 @@ private:
     // ctors, use Reinit() otherwise)
   void Init() { m_pchData = (char *)g_szNul; }
     // initializaes the string with (a part of) C-string
-  void InitWith(const char *psz, size_t nPos = 0, size_t nLen = STRING_MAXLEN);
+  void InitWith(const char *psz, size_t nPos = 0, size_t nLen = wxSTRING_MAXLEN);
     // as Init, but also frees old data
   void Reinit() { GetStringData()->Unlock(); Init(); }
 
@@ -230,6 +226,13 @@ private:
   void CopyBeforeWrite();
   void AllocBeforeWrite(size_t);
 
+  // this method is not implemented - there is _no_ conversion from int to
+  // string, you're doing something wrong if the compiler wants to call it!
+  //
+  // try `s << i' or `s.Printf("%d", i)' instead
+  wxString(int);
+  wxString(long);
+
 public:
   // constructors and destructor
     // ctor for an empty string
@@ -251,11 +254,11 @@ public:
     // string containing nRepeat copies of ch
   wxString(char ch, size_t nRepeat = 1);
     // ctor takes first nLength characters from C string
-    // (default value of STRING_MAXLEN means take all the string)
-  wxString(const char *psz, size_t nLength = STRING_MAXLEN)
+    // (default value of wxSTRING_MAXLEN means take all the string)
+  wxString(const char *psz, size_t nLength = wxSTRING_MAXLEN)
     { InitWith(psz, 0, nLength); }
     // from C string (for compilers using unsigned char)
-  wxString(const unsigned char* psz, size_t nLength = STRING_MAXLEN);
+  wxString(const unsigned char* psz, size_t nLength = wxSTRING_MAXLEN);
     // from wide (UNICODE) string
   wxString(const wchar_t *pwz);
     // dtor is not virtual, this class must not be inherited from!
@@ -266,6 +269,8 @@ public:
   size_t Len() const { return GetStringData()->nDataLength; }
     // string contains any characters?
   bool IsEmpty() const { return Len() == 0; }
+    // empty string is "FALSE", so !str will return TRUE
+  bool operator!() const { return IsEmpty(); }
     // empty string contents
   void Empty()
   {
@@ -403,7 +408,7 @@ public:
   wxString& operator<<(float f);
       // insert a double into string
   wxString& operator<<(double d);
-  
+
   // string comparison
     // case-sensitive comparison: return 0 if =, +1 if > or -1 if <
   int  Cmp(const char *psz) const { return strcmp(c_str(), psz); }
@@ -417,7 +422,7 @@ public:
   // simple sub-string extraction
       // return substring starting at nFirst of length nCount (or till the end
       // if nCount = default value)
-  wxString Mid(size_t nFirst, size_t nCount = STRING_MAXLEN) const;
+  wxString Mid(size_t nFirst, size_t nCount = wxSTRING_MAXLEN) const;
 
     // operator version of Mid()
   wxString  operator()(size_t start, size_t len) const
@@ -441,14 +446,19 @@ public:
   wxString AfterLast(char ch) const;
 
     // for compatibility only, use more explicitly named functions above
-  wxString Before(char ch) const { return BeforeLast(ch); } 
-  wxString After(char ch) const { return AfterFirst(ch); } 
+  wxString Before(char ch) const { return BeforeLast(ch); }
+  wxString After(char ch) const { return AfterFirst(ch); }
 
   // case conversion
-      // convert to upper case, return the string itself
+      // convert to upper case in place, return the string itself
   wxString& MakeUpper();
-      // convert to lower case, return the string itself
+      // convert to upper case, return the copy of the string
+      // Here's something to remember: BC++ doesn't like returns in inlines.
+  wxString Upper() const ;
+      // convert to lower case in place, return the string itself
   wxString& MakeLower();
+      // convert to lower case, return the copy of the string
+  wxString Lower() const ;
 
   // trimming/padding whitespace (either side) and truncating
       // remove spaces from left or from right (default) side
@@ -500,15 +510,9 @@ public:
   enum caseCompare {exact, ignoreCase};
     // values for first parameter of Strip function
   enum stripType {leading = 0x1, trailing = 0x2, both = 0x3};
+
     // use Printf()
-  inline int sprintf(const char *pszFormat, ...)
-  {
-    va_list argptr;
-    va_start(argptr, pszFormat);
-    int iLen = PrintfV(pszFormat, argptr);
-    va_end(argptr);
-    return iLen;
-  }
+  int sprintf(const char *pszFormat, ...);
 
     // use Cmp()
   inline int CompareTo(const char* psz, caseCompare cmp = exact) const
@@ -566,7 +570,7 @@ public:
     // return the length of the string
   size_t length() const { return Len(); }
     // return the maximum size of the string
-  size_t max_size() const { return STRING_MAXLEN; }
+  size_t max_size() const { return wxSTRING_MAXLEN; }
     // resize the string, filling the space with c if c != 0
   void resize(size_t nSize, char ch = '\0');
     // delete the contents of the string
@@ -644,7 +648,7 @@ public:
   size_t find(const wxString& str, size_t nStart = 0) const;
 
   // VC++ 1.5 can't cope with this syntax.
-#if !(defined(_MSC_VER) && !defined(__WIN32__))
+#if !defined(__VISUALC__) || defined(__WIN32__)
     // find first n characters of sz
   size_t find(const char* sz, size_t nStart = 0, size_t n = npos) const;
 #endif
@@ -660,7 +664,7 @@ public:
   size_t rfind(const wxString& str, size_t nStart = npos) const;
 
   // VC++ 1.5 can't cope with this syntax.
-#if ! (defined(_MSC_VER) && !defined(__WIN32__))
+#if !defined(__VISUALC__) || defined(__WIN32__)
     // as find, but from the end
   size_t rfind(const char* sz, size_t nStart = npos,
           size_t n = npos) const;
@@ -853,19 +857,7 @@ wxString WXDLLEXPORT operator+(const char *psz, const wxString& string);
 
 #ifdef wxSTD_STRING_COMPATIBILITY
 
-// forward declare iostream
-// Known not to work with wxUSE_IOSTREAMH set to 0, so
-// replacing with includes (on advice of ungod@pasdex.com.au)
-// class WXDLLEXPORT istream;
-#if wxUSE_IOSTREAMH
-// N.B. BC++ doesn't have istream.h, ostream.h
-#include <iostream.h>
-#else
-#include <istream>
-#  ifdef _MSC_VER
-      using namespace std;
-#  endif
-#endif
+#include "wx/ioswrap.h"
 
 WXDLLEXPORT istream& operator>>(istream& is, wxString& str);