#ifdef HAVE_STRINGS_H
#include <strings.h> // for strcasecmp()
-#endif // AIX
+#endif // HAVE_STRINGS_H
#include "wx/defs.h" // everybody should include this
#include "wx/wxchar.h" // for wxChar
return stricmp(psz1, psz2);
#elif defined(__WATCOMC__)
return stricmp(psz1, psz2);
+#elif defined(__DJGPP__)
+ return stricmp(psz1, psz2);
#elif defined(__EMX__)
return stricmp(psz1, psz2);
#elif defined(__WXPM__)
#if wxUSE_WCHAR_T
// from wide (Unicode) string
- wxString(const wchar_t *pwz, wxMBConv& conv = wxConvLibc);
+ wxString(const wchar_t *pwz, wxMBConv& conv = wxConvLibc, size_t nLength = wxSTRING_MAXLEN);
#endif // !wxUSE_WCHAR_T
// from wxCharBuffer
bool IsEmpty() const { return Len() == 0; }
// empty string is "FALSE", so !str will return TRUE
bool operator!() const { return IsEmpty(); }
+ // truncate the string to given length
+ wxString& Truncate(size_t uiLen);
// empty string contents
void Empty()
{
- if ( !IsEmpty() )
- Reinit();
+ Truncate(0);
- // should be empty
- wxASSERT( GetStringData()->nDataLength == 0 );
+ wxASSERT_MSG( IsEmpty(), _T("string not empty after call to Empty()?") );
}
// empty the string and free memory
void Clear()
wxString& Trim(bool bFromRight = TRUE);
// add nCount copies chPad in the beginning or at the end (default)
wxString& Pad(size_t nCount, wxChar chPad = wxT(' '), bool bFromRight = TRUE);
- // truncate string to given length
- wxString& Truncate(size_t uiLen);
// searching and replacing
// searching (return starting index, or -1 if not found)
// conversion to numbers: all functions return TRUE only if the whole string
// is a number and put the value of this number into the pointer provided
// convert to a signed integer
- bool ToLong(long *val) const;
+ bool ToLong(long *val, int base = 0) const;
// convert to an unsigned integer
- bool ToULong(unsigned long *val) const;
+ bool ToULong(unsigned long *val, int base = 0) const;
// convert to a double
bool ToDouble(double *val) const;
wxString& append(size_t n, wxChar ch) { return Pad(n, ch); }
// same as `this_string = str'
- wxString& assign(const wxString& str) { return (*this) = str; }
+ wxString& assign(const wxString& str)
+ { return *this = str; }
// same as ` = str[pos..pos + n]
wxString& assign(const wxString& str, size_t pos, size_t n)
- { return *this = wxString((const wxChar *)str + pos, n); }
+ { Empty(); return Append(str.c_str() + pos, n); }
// same as `= first n (or all if n == npos) characters of sz'
wxString& assign(const wxChar *sz, size_t n = npos)
- { return *this = wxString(sz, n); }
+ { Empty(); return Append(sz, n == npos ? wxStrlen(sz) : n); }
// same as `= n copies of ch'
wxString& assign(size_t n, wxChar ch)
- { return *this = wxString(ch, n); }
+ { Empty(); return Append(ch, n); }
// insert another string
wxString& insert(size_t nPos, const wxString& str);
const wxString& second);
// constructors and destructor
- // default ctor: if autoSort is TRUE, the array is always sorted (in
- // alphabetical order)
- wxArrayString(bool autoSort = FALSE);
+ // default ctor
+ wxArrayString() { Init(FALSE); }
+ // if autoSort is TRUE, the array is always sorted (in alphabetical order)
+ //
+ // NB: the reason for using int and not bool is that like this we can avoid
+ // using this ctor for implicit conversions from "const char *" (which
+ // we'd like to be implicitly converted to wxString instead!)
+ //
+ // of course, using explicit would be even better - if all compilers
+ // supported it...
+ wxArrayString(int autoSort) { Init(autoSort != 0); }
// copy ctor
wxArrayString(const wxArrayString& array);
// assignment operator
// get last item
wxString& Last() const { wxASSERT( !IsEmpty() ); return Item(Count() - 1); }
+ // return a wxString[], useful for the controls which
+ // take one in their ctor. You must delete[] it yourself
+ // once you are done with it. Will return NULL if the
+ // ArrayString was empty.
+ wxString* GetStringArray() const;
+
// item management
// Search the element in the array, starting from the beginning if
// bFromEnd is FALSE or from end otherwise. If bCase, comparison is case
size_t Add(const wxString& str);
// add new element at given position
void Insert(const wxString& str, size_t uiIndex);
+ // expand the array to have count elements
+ void SetCount(size_t count);
// remove first item matching this value
void Remove(const wxChar *sz);
// remove item by index
bool operator!=(const wxArrayString& a) const { return !(*this == a); }
protected:
+ void Init(bool autoSort); // common part of all ctors
void Copy(const wxArrayString& src); // copies the contents of another array
private:
{ Copy(array); }
};
+// ----------------------------------------------------------------------------
+// wxStringBuffer: a tiny class allowing to get a writable pointer into string
+// ----------------------------------------------------------------------------
+
+class WXDLLEXPORT wxStringBuffer
+{
+public:
+ wxStringBuffer(wxString& str, size_t lenWanted = 1024)
+ : m_str(str) { m_buf = m_str.GetWriteBuf(lenWanted); }
+
+ ~wxStringBuffer() { m_str.UngetWriteBuf(); }
+
+ operator wxChar*() const { return m_buf; }
+
+private:
+ wxString& m_str;
+ wxChar *m_buf;
+};
+
// ---------------------------------------------------------------------------
// wxString comparison functions: operator versions are always case sensitive
// ---------------------------------------------------------------------------