1 /** 2 * Copyright Mikael H�gdahl - triyana@users.sourceforge.net 3 * 4 * This source is distributed under the terms of the Q Public License version 1.0, 5 * created by Trolltech (www.trolltech.com). 6 */ 7 8 #ifndef MHString_h 9 #define MHString_h 10 11 #include <math.h> 12 #include "MH.h" 13 #include "MHUtil.h" 14 15 16 17 /** 18 * A string class. 19 */ 20 class MHString : public MH { 21 public: 22 enum { 23 SORT_STRING = 0, 24 SORT_NUM, 25 }; 26 MHString()27 MHString () : MH() {aData = 0; allocate((const char*)"");} MHString(const MHString & s)28 MHString (const MHString& s) : MH() {if (&s == this) return; aData = 0; allocate(s.Get());} MHString(const char * s)29 MHString (const char* s) : MH() {aData = 0; allocate(s);} MHString(int n)30 MHString (int n) : MH() {aData = 0; allocate(n);} MHString(double n)31 MHString (double n) : MH() {aData = 0; allocate(n);} 32 MHString (int size, const char *str, ...); ~MHString()33 virtual ~MHString () {Clear();} 34 35 //friend ostream& operator<< (ostream& os, MHString& s) {os << s(); return os;} 36 //friend ostream& operator<< (ostream& os, MHString* s) {os << (*s)(); return os;} 37 38 MHString& operator= (const MHString& s) {if (&s == this) return *this; allocate(s);return *this;} 39 MHString& operator= (const char* s) {allocate(s);return *this;} 40 MHString& operator= (int n) {allocate(n);return *this;} 41 MHString& operator= (double n) {allocate(n);return *this;} 42 43 MHString& operator+= (const MHString& s) {allocate(aData, s.Get());return *this;} 44 MHString& operator+= (const char* s) {allocate(aData, s);return *this;} 45 MHString& operator+= (int n) {allocate(aData, n);return *this;} 46 MHString& operator+= (double n) {allocate(aData, n);return *this;} 47 48 MHString operator+ (const MHString& s) {MHString s3(aData); s3 += s; return s3;} 49 MHString operator+ (const char* s) {MHString s3(aData); s3 += s; return s3;} 50 MHString operator+ (int n) {MHString s3(aData); s3 += n; return s3;} 51 MHString operator+ (double n) {MHString s3(aData); s3 += n; return s3;} 52 53 bool operator== (const MHString& s) {return (Compare (s.Get ()) == 0) ? true : false;} 54 bool operator== (const char* s) {return (Compare (s) == 0) ? true : false;} 55 bool operator!= (const MHString& s) {return (Compare (s.Get ()) != 0) ? true : false;} 56 bool operator!= (const char* s) {return (Compare (s) != 0) ? true : false;} 57 bool operator< (const MHString& s) {return (Compare (s.Get ()) < 0) ? true : false;} 58 bool operator< (const char* s) {return (Compare (s) < 0) ? true : false;} 59 bool operator> (const MHString& s) {return (Compare (s.Get ()) > 0) ? true : false;} 60 bool operator> (const char* s) {return (Compare (s) > 0) ? true : false;} 61 bool operator<= (const MHString& s) {return (Compare (s.Get ()) < 1) ? true : false;} 62 bool operator<= (const char* s) {return (Compare (s) < 1) ? true : false;} 63 bool operator>= (const MHString& s) {return (Compare (s.Get ()) >= 0) ? true : false;} 64 bool operator>= (const char* s) {return (Compare (s) >= 0) ? true : false;} 65 66 char operator[] (int i) {return aData[i];} operator()67 const char* operator() () {return aData;} 68 AlignLeft(int nWidth,char pad)69 void AlignLeft (int nWidth, char pad) {align (false, nWidth, pad);} AlignRight(int nWidth,char pad)70 void AlignRight (int nWidth, char pad) {align (true, nWidth, pad);} 71 void CapitalizeAll (); 72 void CapitalizeFirst (); Class()73 const char* Class () {return "MHString";} 74 int Compare (const char* pBuffer); 75 int Compare (const MH* o, int type); 76 int CompareIgnoreCase (const char* pBuffer); Double()77 double Double () {return (aLen > 0) ? strtod(aData, 0) : HUGE_VAL;} Erase()78 void Erase () {*this = "";} Escape()79 const char* Escape () {return Get();} 80 int Find (const MHString& s, int nStart = 0) {return find (s.Get(), nStart, true);} 81 int Find (const char* s, int nStart = 0) {return find (s, nStart, true);} 82 int FindIgnoreCase (const char* s, int nStart = 0) {return find (s, nStart, false);} 83 int FindIgnoreCase (const MHString& s, int nStart = 0) {return find (s.Get(), nStart, false);} Get()84 const char* Get () const {return aData;} GetChar(int i)85 char GetChar (int i) {return (i >= 0 && i < aLen) ? aData[i] : '\0';} GetLastChar()86 char GetLastChar () {return (aLen > 0) ? aData[aLen - 1] : '\0';} HashKey()87 const char* HashKey () {return ((aData && *aData) ? aData : "MHString");} 88 MHString Left (int count); Int()89 int Int () {return (aLen > 0) ? atoi (aData) : 0;} 90 MHString Mid (int nStart, int nCount); Pop()91 char Pop () {if (aLen > 0) {char c = aData[aLen - 1]; aData[aLen - 1] = '\0'; aLen--; return c;} else return '\0';} 92 void Remove (char Char); 93 void RemoveHead (char Char); 94 void RemoveTail (char Char); 95 MHString Right (int nCount); 96 void Shrink (int size); 97 static void Save (const char* fileName, MHVector* v, bool nl = false, bool row = false); SetChar(int i,int c)98 void SetChar (int i, int c) {if (i >= 0 && i < aLen) aData[i] = c;} Size()99 int Size () {return aLen;} 100 int Split (char c, MHVector* ve); 101 int Split (MHVector* ve, int nFirstPos, ...); 102 void Sprintf (int len, const char *str, ...); 103 void Strip (); 104 int Subst (char OldChar, char NewChar, int nKeepMinOldChar); ToDouble()105 double ToDouble () {return (aData) ? atof (aData) : 0.0;} ToInt()106 int ToInt () {return (aData) ? atoi (aData) : 0;} 107 void ToLower (); 108 void ToUpper (); 109 110 private: 111 char* aData; 112 int aLen; 113 114 void align (bool right, int nWidth, char pad); allocate(const MHString & s)115 void allocate (const MHString& s) {allocate (s.Get());} 116 void allocate (const char* s); 117 void allocate (char* s); 118 void allocate (int n); 119 void allocate (double n); 120 void allocate (const char* s, const char* s2); 121 void allocate (const char* s, int n); 122 void allocate (const char* s, double n); 123 124 void Clear (); 125 char* createAndConcat (const char* string1, const char* string2); 126 int find (const char* word, int start, bool compareCase); 127 }; 128 129 #endif 130