#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"
// 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 *)
// 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);
// 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(); }
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
// 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!
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()
{
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); }
// 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
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
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
// 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
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
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;
#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);