123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473 |
- #ifndef _STRING_H_WASABI
- #define _STRING_H_WASABI
- #ifdef __cplusplus
- #include <bfc/platform/types.h>
- #include <stdarg.h>
- class String
- {
- public:
- String(const char *initial_val = NULL);
- String(const String &s);
- String(const String *s);
- ~String();
-
- const char *getValue() const { return val; }
- const char *v() const { return getValue(); }
- operator const char *() const { return getValue(); }
-
- const char *getValueSafe(const char *def_val = "") const;
-
- int getChar(int pos, int bounds_check = false);
-
- int setChar(int pos, int value);
-
- const char *setValue(const char *newval);
-
- char *getNonConstVal() { return const_cast<char *>(getValue()); }
- const char *operator =(const char *newval) { return setValue(newval); }
- const char *operator +=(const char *addval)
- {
- return cat(addval);
- }
- const char *operator +=(char value);
- const char *operator +=(int value);
- const char *operator +=(GUID guid);
-
- String &operator =(const String &s)
- {
- if (this != &s)
- setValue(s);
- return *this;
- }
-
- inline int operator ==(const char *val) const
- {
- if (!val) return isempty();
- return isequal(val);
- }
- inline int operator <(const char *val) const
- {
- return islessthan(val);
- }
- inline int operator !=(const char *val) const
- {
- if (!val) return !isempty();
- return !isequal(val);
- }
- inline int operator >(const char *val) const
- {
- return (!islessthan(val)) && (!isequal(val));
- }
- inline String operator +(const char *val)
- {
- String retval = *this;
- return retval += val;
- }
- inline int operator ==(const String &val) const
- {
- return isequal(val);
- }
- inline int operator <(const String &val) const
- {
- return islessthan(val);
- }
- inline int operator !=(const String &val) const
- {
- return !isequal(val);
- }
- inline int operator >(const String &val) const
- {
- return (!islessthan(val)) && (!isequal(val));
- }
- inline String operator +(const String &val)
- {
- String retval = *this;
- return retval += val;
- }
- inline String operator +(const char val)
- {
- String retval = *this;
- return retval += val;
- }
-
- int len() const;
-
- int isempty() const;
-
- void toupper();
-
- void tolower();
-
- int isequal(const char *otherval) const;
-
- int iscaseequal(const char *otherval) const;
- int islessthan(const char *otherval) const;
-
- void changeChar(int from, int to);
-
- void truncateOnChar(int which, int fromright = false);
-
- int lastChar();
-
- const char *printf(const char *format, ...);
-
- const char *cat(const char *value);
-
- const char *catn(const char *value, int len);
-
- const char *catPostSeparator(const char *value, const char separator);
-
- const char *catPreSeparator(const char separator, const char *value);
-
- const char *prepend(const char *value);
-
- const char *ncpy(const char *newstr, int numchars);
-
- void strncpyTo(char *dest, int maxlen);
-
-
-
-
-
- int lFindChar(char findval);
- int lFindChar(const char *findval);
- int rFindChar(char findval);
- int rFindChar(const char *findval);
-
-
-
-
- String lSplit(int idxval);
- String lSplitChar(char findval);
- String lSplitChar(const char *findval);
- String rSplit(int idxval);
- String rSplitChar(char findval);
- String rSplitChar(const char *findval);
-
- String lSpliceChar(char findval);
- String lSpliceChar(const char *findval);
- String rSpliceChar(char findval);
- String rSpliceChar(const char *findval);
-
- int replace(const char *find, const char *replace);
-
- int replaceNumericField(int value, int fieldchar = '\x24');
-
-
- int numCharacters();
-
- void trunc(int newlen);
- void trim(const char *whitespace = " \t\r\n", int left = true, int right = true);
-
- int va_sprintf(const char *format, va_list args);
-
- void purge();
- void swap(String *);
- void swap(String &);
- void own(char *);
-
- void AppendPath(const char *path);
- protected:
- char * val;
- enum { wastage_allowed = 128 };
- };
- class StringPrintf : public String
- {
- public:
- StringPrintf(const char *format = NULL, ...);
- StringPrintf(int value);
- StringPrintf(double value);
- StringPrintf(GUID g);
- };
- class StringToLower : public String
- {
- public:
- StringToLower(const char *val = NULL) : String(val)
- {
- tolower();
- }
- };
- class StringToUpper : public String
- {
- public:
- StringToUpper(const char *val = NULL) : String(val)
- {
- toupper();
- }
- };
- #if defined(NDEBUG) && defined(WASABI_NO_RELEASEMODE_DEBUGSTRINGS)
- #define DebugString __noop
- #else
- #define DebugString _DebugString
- #endif
- class _DebugString : public String
- {
- public:
- _DebugString(const char *format = NULL, ...);
- _DebugString(const String &s);
- _DebugString(const String *s);
- void debugPrint();
- };
- #define RecycleString String
- inline const char *String::operator +=(char value)
- {
- return cat(StringPrintf("%c", value));
-
-
- }
- inline const char *String::operator +=(int value)
- {
- return cat(StringPrintf("%i", value));
- }
- inline const char *String::operator +=(GUID guid)
- {
- return cat(StringPrintf(guid));
- }
- inline int operator ==(const char *v1, const String &v2)
- {
- return v2.isequal(v1);
- }
- inline int operator !=(const char *v1, const String &v2)
- {
- return !v2.isequal(v1);
- }
- inline int operator <(const char *v1, const String &v2)
- {
- return !v2.islessthan(v1);
- }
- inline int operator >(const char *v1, const String &v2)
- {
- return v2.islessthan(v1);
- }
- class StringComparator
- {
- public:
-
- static int compareItem(String *p1, String* p2);
-
- static int compareAttrib(const wchar_t *attrib, String *item);
- };
- #endif
- #endif
|