home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / ool.zip / OOL / include / XSTRING.H < prev    next >
C/C++ Source or Header  |  1997-04-08  |  12KB  |  335 lines

  1. // (C) 1996 Jens von Pilgrim
  2.  
  3.  
  4. /*DOC
  5. CLASS XString
  6. Author: Jens von Pilgrim
  7.  
  8. Last change:   13.03.1997
  9. */
  10.  
  11. /*
  12. History
  13.   16.08.1995: - FastFind noch nicht ausgereift!
  14.   26.03.1996: - XString arbeitet jetzt schneller (Länge wird gespeichert),
  15.                  nicht mehr "direkt" kompatibel zu pszChar!
  16.               - assert-Abfrage wird nur bei definierten DEBUG durchgeführt
  17.   27.03.1996: - neuer () Operator: Liefert char-Zeiger zurück,
  18.                 optionaler Parameter: Count analog zu Left()
  19.               - Cast-Operatoren für
  20.                 XString -> int, const int, long, const long, double, const double
  21.                 sowie
  22.               - Konstruktoren für Zahlen: XString(int|long [,radix]) 
  23.   01.04.1996: - Copy-Konstruktor ohne Speicherreservierung für den Char-String
  24.                 => vorsicht! Schnell aber gefährlich!
  25.   29.05.1996: - Strip-Funktion
  26.               - [] - Operator
  27.               - DelSubString
  28.   05.06.1996: - Replace
  29.               - Bug in Find behoben ( ./ in .../ nicht gefunden!
  30.   06.06.1996: - Umstellung: signed nach XSIZE_T bei
  31.                 Find und m_Length (und allgemein wo From oder To oder so auftauchen!)
  32.               => Umsetllung von Find:
  33.                 statt: Positon = Find(Was, Von, Bis) nun: 
  34.                  gefunden = Find(Pos, Was, Von, Bis)
  35.                 Ergebnis: bool (true: Found, false: Not found)
  36.   07.06.1996: - operatoren <, <=, >, <= funktionieren jetzt RICHTIG!
  37.   06.08.1996: - Anpassungen fⁿr Visual C++ 4.0 (operatoren als Friends...)
  38.               - MakeUpper, MakeLower
  39.   12.08.1996: - InCase - Flag bei Find/FindRev/Replace
  40.               - neue Funktion UpperC
  41.   17.10.1006: - diverse Anpassungen fuer Visual C++ 4.0 und XVT
  42.               - BOOL (und TRUE, FALSE) werden durch bool, true und false ersetzt
  43.   20.11.1996: Anpasungen fⁿr VC4.0:
  44.               - Operatoren ==, <=, >=, <, > 3 mal vorhanden:
  45.                 XString-XString, lpszChar-XString, XString-lpszChar
  46.               - []-Operator 3-mal: [XSIZE_T], [ULONG], [int]
  47.   20.11.1996: []-Operator liefert Refernez auf Zeichen, so dass
  48.               z.B.:  A[i]='x' m÷glich ist
  49.               01.02.1997: zusΣtzliche Find/FindRev-Funktion ohne 
  50.                           Rⁿckparameter der gefundenen Stelle
  51.   08.02.1997: - Folgende Funktionen als const definiert:    
  52.                 Find, FindRev, SFind, SFindRev, IsEmpty, StrCmp,
  53.                 Mid, Left, Right, GetLength
  54.                 caster: int, long, char etc...
  55.               - statt XBOOL jetzt: bool aus bool.h der STL    
  56.               - neue Funktion:
  57.                 StripWhitespaces ( int where = XBOTH )
  58.   11.02.1997: - stream-operatoren: << und >>
  59.   12.02.1997: - neue FunktionalitΣt:
  60.                 XString k÷nnen "undefiniert" sein, also
  61.                 nicht initialisiert bzw. definiert NULL.
  62.                 Der Standardkonstruktor erzeugt einen
  63.                 "undefinierten" String, welcher sich
  64.                 aber voll kompatibel zur vorherigen Version
  65.                 zeigt.
  66.                 Folgende Funktionen sind daher neu:
  67.                 bool IsNULL() const;
  68.                 void MakeNULL();
  69.  
  70.                 Zur leichterten Lesbarkeit wurde auch die
  71.                 "Empty-"FunktionalitΣt ⁿberarbeitet:
  72.                 bool IsEmpty() const; // wie gehabt
  73.                 void MakeEmpty();
  74.  
  75.                 sΣmtliche (potentielle) Schreibfunktionen
  76.                 haben als Nachbedingung IsNULL()==false
  77.                 (auch DelSubString, +=, MakeUpper, Strip,
  78.                  ReleaseBuffer, MakeEmpty)
  79.                 ABER: = kopiert Zustand!
  80.   13.03.1997: - Umbenannt:
  81.                 sFind -> Search 
  82.                 sFindRev -> SearchRev
  83.               - neue Funktionen:
  84.                 FindWhitespace
  85.                 SearchWhitespace 
  86.  24.03,1997: - NEUE TEMPLATE-CLASS: XSplitableString
  87.                  - Split // by Separator
  88.                  - Split // by Whitespaces
  89.                  - GetTableDatas 
  90.  
  91. ****************************************************************************/
  92.  
  93.  
  94. #ifndef _XSTRING_H_
  95. #define _XSTRING_H_
  96.  
  97. #include "xinclude.h"
  98.  
  99.  
  100. #include <iostream.h>
  101. #include <stdarg.h>
  102.  
  103. #ifndef NULL
  104.   #define NULL 0
  105. #endif
  106.  
  107. #ifndef XLEFT
  108.   #define XALL 0
  109.   #define XLEFT 1
  110.   #define XRIGHT 2
  111.   #define XBOTH 3
  112. #endif
  113.  
  114. class _export_ XString
  115. {
  116.  
  117.   public:
  118.  
  119.     XString();
  120.     XString(const XString &aString);
  121.     
  122.     XString(char aChar);
  123.     XString(char *pszChar);
  124.     XString(const char *pszChar);
  125.  
  126.     XString(int aNumber, int Radix = 10);
  127.     XString(long aNumber, int Radix = 10);
  128.   
  129.     virtual ~XString();
  130.  
  131.   protected:
  132.      XString(char *pszChar, int duplicate);
  133.  
  134.   public:
  135.  
  136. /////////////////////////
  137. //  cast - operators
  138. //    operator const char *const() const;
  139.     operator const int() const;
  140.     operator const long() const;
  141.     operator const double() const;
  142.  
  143.  
  144.         operator char* () const { return((char*) m_pszChar); }
  145. //TBO
  146. #ifndef __WATCOMC__
  147.         operator const char* () const { return((const char*) m_pszChar); }
  148. #endif
  149.  
  150.     char* operator() (XSIZE_T inCount); // == Left(inCount)
  151.  
  152.     char& operator[] (XSIZE_T inZeroIndex) const; // neu 20.11
  153.     char& operator[] (int inZeroIndex) const;     // neu 20.11
  154.  
  155.     char& At(XSIZE_T inZeroIndex) const;
  156.  
  157.     XString operator =(const XString &aString);
  158.     
  159.     virtual int StrCmp(const XString &inThen) const;
  160.  
  161.      
  162.  
  163.  
  164.  
  165.  
  166.     XString operator +=(const XString &Str);
  167.     XString operator +=(const char *Str);
  168.  
  169.     virtual XString Mid(XSIZE_T From, XSIZE_T Count) const;
  170.     virtual XString Left(XSIZE_T Count) const;
  171.     virtual XString Right(XSIZE_T Count) const;
  172.     virtual  XSIZE_T GetLength() const;
  173.  
  174.     BOOL IsEmpty() const;
  175.     void MakeEmpty();
  176.  
  177.     BOOL IsNULL() const;
  178.     void MakeNULL();
  179.  
  180.     BOOL Find(XSIZE_T &outPos, const XString &SubString, XSIZE_T From = 0, XSIZE_T inTo = 0, BOOL inInCase=FALSE) const;
  181.     BOOL FindRev(XSIZE_T &outPos, const XString &SubString, XSIZE_T From = 0, XSIZE_T inTo = 0, BOOL inInCase=FALSE) const;
  182.  
  183.     BOOL Search(const XString &SubString, XSIZE_T From = 0, XSIZE_T inTo = 0, BOOL inInCase=FALSE) const;
  184.     BOOL SearchRev(const XString &SubString, XSIZE_T From = 0, XSIZE_T inTo = 0, BOOL inInCase=FALSE) const;
  185.  
  186.     BOOL FindWhitespace ( XSIZE_T &outPos, XSIZE_T inFrom = 0, XSIZE_T inTo = 0) const;
  187.     BOOL SearchWhitespace ( XSIZE_T inFrom = 0, XSIZE_T inTo = 0) const;
  188.  
  189.     BOOL FindAlpha ( XSIZE_T &outPos, XSIZE_T inFrom = 0, XSIZE_T inTo = 0) const;
  190.     BOOL FindNonAlpha ( XSIZE_T &outPos, XSIZE_T inFrom = 0, XSIZE_T inTo = 0) const;
  191.     BOOL SearchAlpha( XSIZE_T inFrom = 0, XSIZE_T inTo = 0) const;
  192.     BOOL SearchNonAlpha ( XSIZE_T inFrom = 0, XSIZE_T inTo = 0) const;
  193.  
  194.     int Strip(int inWhere = XBOTH, char inChar = ' ');
  195.     int StripWhitespaces ( int inWhere = XBOTH );
  196.     int DelSubString(XString inSubString);
  197.     int DelSubString(XSIZE_T inFrom, XSIZE_T inCount=1);
  198.  
  199.     int Replace(XString inSearch, XString inReplace, int inTimes=XALL, XSIZE_T inFrom=0, XSIZE_T inTo=0, BOOL inInCase=FALSE);
  200.  
  201.     char* GetBuffer(int Size);
  202.  
  203.     char* GetBuffer(XSIZE_T Size=0);
  204.     int ReleaseBuffer(XSIZE_T Length=0);
  205.  
  206.     void MakeUpper();
  207.     void MakeLower();
  208.     
  209.     static char UpperChar(char inChar);
  210.     
  211.     
  212. /////////////////////////
  213. // Friends
  214.  
  215.     /////////////////////////
  216.     //  streams:
  217.  // TBO
  218.  #ifndef __WATCOMC__
  219.     _export_ friend ostream& operator<<(ostream&, const XString& );
  220.     _export_ friend istream& operator>>(istream&, XString& );
  221.  
  222.     /////////////////////////
  223.     // Compare (weitere Compare-Funktionen stⁿtzen sich
  224.     // auf == und < ab, mⁿssen also keine Friends sein!
  225.     _export_ friend XString operator +(const XString Str1, const char *pszChar2);
  226.     _export_ friend XString operator +(const char *pszChar1, const XString Str2);
  227.     _export_ friend XString operator +(const XString& Str1, const XString& Str2);
  228.     
  229.     _export_ friend int operator ==(const XString &inS1, const XString &inS2) ;
  230.     _export_ friend int operator ==(const XString &inS1, const char *pszChar2) ;
  231.     _export_ friend int operator ==(const char *pszChar1, const XString &inS2) ;
  232.  
  233.     _export_ friend int operator <(const XString &inS1, const XString &inS2);
  234.     _export_ friend int operator <(const XString &inS1, const char *pszChar2);
  235.     _export_ friend int operator <(const char *pszChar1, const XString &inS2);
  236. #else
  237.     friend ostream& _export_ operator<<(ostream&, const XString& );
  238.     friend istream& _export_ operator>>(istream&, XString& );
  239.  
  240.     /////////////////////////
  241.     // Compare (weitere Compare-Funktionen stⁿtzen sich
  242.     // auf == und < ab, mⁿssen also keine Friends sein!
  243.     friend XString _export_ operator +(XString Str1, const char *pszChar2);
  244.     friend XString _export_ operator +(const char *pszChar1, XString Str2);
  245.     friend XString _export_ operator +(XString& Str1, XString& Str2);
  246.     
  247.     friend int _export_ operator ==(const XString &inS1, const XString &inS2) ;
  248.     friend int _export_ operator ==(const XString &inS1, const char *pszChar2) ;
  249.     friend int _export_ operator ==(const char *pszChar1, const XString &inS2) ;
  250.  
  251.     friend int _export_ operator <(const XString &inS1, const XString &inS2);
  252.     friend int _export_ operator <(const XString &inS1, const char *pszChar2);
  253.     friend int _export_ operator <(const char *pszChar1, const XString &inS2);
  254. #endif
  255.     
  256. ////////////////
  257.  
  258.  
  259. private:
  260.     char *m_pszChar;
  261.     XSIZE_T  m_Length;
  262.     BOOL m_isNULL;
  263.  
  264. };
  265.  
  266.  
  267. ////////////////////////////////////////////////
  268. // Friends - Prototypes
  269.  
  270. // TBO
  271. #ifndef __WATCOMC__
  272. _export_ ostream& operator<<(ostream&, const XString& );
  273. _export_ istream& operator>>(istream&, XString& );
  274.  
  275. _export_ XString operator +(const XString Str1, const char *pszChar2);
  276. _export_ XString operator +(const char *pszChar1, const XString Str2);
  277. _export_ XString operator +(const XString& Str1, const XString& Str2);
  278.  
  279. _export_ int operator ==(const XString &inS1, const XString &inS2) ;
  280. _export_ int operator !=(const XString &inS1, const XString &inS2) ;
  281. _export_ int operator <=(const XString &inS1, const XString &inS2);
  282. _export_ int operator >=(const XString &inS1, const XString &inS2);
  283. _export_ int operator >(const XString &inS1, const XString &inS2);
  284. _export_ int operator <(const XString &inS1, const XString &inS2);
  285.  
  286. _export_ int operator ==(const XString &inS1, const char *pszChar2) ;
  287. _export_ int operator !=(const XString &inS1, const char *pszChar2) ;
  288. _export_ int operator <=(const XString &inS1, const char *pszChar2);
  289. _export_ int operator >=(const XString &inS1, const char *pszChar2);
  290. _export_ int operator >(const XString &inS1, const char *pszChar2);
  291. _export_ int operator <(const XString &inS1, const char *pszChar2);
  292.  
  293. _export_ int operator ==(const char *pszChar1, const XString &inS2) ;
  294. _export_ int operator !=(const char *pszChar1, const XString &inS2) ;
  295. _export_ int operator <=(const char *pszChar1, const XString &inS2);
  296. _export_ int operator >=(const char *pszChar1, const XString &inS2);
  297. _export_ int operator >(const char *pszChar1, const XString &inS2);
  298. _export_ int operator <(const char *pszChar1, const XString &inS2);
  299. #else
  300. ostream& _export_ operator<<(ostream&, const XString& );
  301. istream& _export_ operator>>(istream&, XString& );
  302.  
  303. XString _export_ operator +(XString Str1, const char *pszChar2);
  304. XString _export_ operator +(const char *pszChar1, XString Str2);
  305. XString _export_ operator +(XString& Str1, XString& Str2);
  306.  
  307. int _export_ operator ==(const XString &inS1, const XString &inS2) ;
  308. int _export_ operator !=(const XString &inS1, const XString &inS2) ;
  309. int _export_ operator <=(const XString &inS1, const XString &inS2);
  310. int _export_ operator >=(const XString &inS1, const XString &inS2);
  311. int _export_ operator >(const XString &inS1, const XString &inS2);
  312. int _export_ operator <(const XString &inS1, const XString &inS2);
  313.  
  314. int _export_ operator ==(const XString &inS1, const char *pszChar2) ;
  315. int _export_ operator !=(const XString &inS1, const char *pszChar2) ;
  316. int _export_ operator <=(const XString &inS1, const char *pszChar2);
  317. int _export_ operator >=(const XString &inS1, const char *pszChar2);
  318. int _export_ operator >(const XString &inS1, const char *pszChar2);
  319. int _export_ operator <(const XString &inS1, const char *pszChar2);
  320.  
  321. int _export_ operator ==(const char *pszChar1, const XString &inS2) ;
  322. int _export_ operator !=(const char *pszChar1, const XString &inS2) ;
  323. int _export_ operator <=(const char *pszChar1, const XString &inS2);
  324. int _export_ operator >=(const char *pszChar1, const XString &inS2);
  325. int _export_ operator >(const char *pszChar1, const XString &inS2);
  326. int _export_ operator <(const char *pszChar1, const XString &inS2);
  327. #endif
  328.  
  329.  
  330.  
  331. #endif
  332.  
  333.  
  334.  
  335.