home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / ool_main.zip / ool / include / XSTRING.H < prev    next >
C/C++ Source or Header  |  1998-03-24  |  13KB  |  438 lines

  1. /*
  2.    XString
  3.  
  4.    Version July 1997
  5.  
  6.    (C) 1996 Jens von Pilgrim
  7.        1997 Jens von Pilgrim
  8.  
  9.    jpilgri@gwdg.de
  10. */
  11.  
  12.  
  13. /*@
  14. @class XString
  15. @symbol XString
  16. @type overview
  17. @remarks XString implements a powerful String-Class!
  18. @history
  19. 16.08.1995
  20. - FastFind noch nicht ausgereift!
  21.  
  22. 26.03.1996
  23. - XString arbeitet jetzt schneller (LΣnge wird gespeichert),
  24.   nicht mehr "direkt" kompatibel zu pszChar!
  25. - assert-Abfrage wird nur bei definierten DEBUG durchgefⁿhrt
  26.  
  27. 27.03.1996
  28. - neuer () Operator: Liefert char-Zeiger zurⁿck,
  29.   optionaler Parameter: Count analog zu Left()
  30. - Cast-Operatoren fⁿr
  31.   XString -> int, const int, long, const long, double, const double
  32.   (umbenannt nach MakeXXX, s.u.)
  33. - Konstruktoren fⁿr Zahlen: XString(int|long [,radix])
  34.  
  35. 01.04.1996:
  36. - Copy-Konstruktor ohne Speicherreservierung fⁿr den Char-String
  37.   => vorsicht! Schnell aber gefΣhrlich! Daher PROTECTED!
  38.  
  39. 29.05.1996:
  40. - Strip-Funktion
  41. - [] - Operator
  42. - DelSubString
  43.  
  44. 05.06.1996:
  45. - Replace
  46. - Bug in Find behoben ( z.B. ./ in .../ nicht gefunden)!
  47.  
  48.   06.06.1996:
  49. - Umstellung: signed nach XSIZE_T bei
  50.   Find und m_Length (und allgemein wo From oder To oder so auftauchen!)
  51.   => Umsetllung von Find:
  52.   statt: Positon = Find(Was, Von, Bis) nun:
  53.   gefunden = Find(Pos, Was, Von, Bis)
  54.   Ergebnis: BOOL (true: Found, false: Not found)
  55.  
  56. 07.06.1996:
  57. - operatoren <, <=, >, <= funktionieren jetzt RICHTIG!
  58.  
  59. 06.08.1996:
  60. - Anpassungen fⁿr Visual C++ 4.0 (operatoren als Friends...)
  61. - MakeUpper, MakeLower
  62.  
  63. 12.08.1996:
  64. - InCase - Flag bei Find/FindRev/Replace
  65. - neue Funktion UpperC
  66.  
  67. 17.10.1006:
  68. - diverse Anpassungen fuer Visual C++ 4.0 und XVT
  69. - BOOL (und TRUE, FALSE) werden durch BOOL, true und false ersetzt
  70.  
  71. 20.11.1996:
  72. Anpasungen fⁿr VC4.0:
  73. - Operatoren ==, <=, >=, <, > 3 mal vorhanden:
  74.   XString-XString, lpszChar-XString, XString-lpszChar
  75. - []-Operator 3-mal: [XSIZE_T], [ULONG], [int]
  76.  
  77. 20.11.1996:
  78. - []-Operator liefert Refernez auf Zeichen, so dass
  79.   z.B.:  A[i]='x' m÷glich ist
  80.  
  81. 01.02.1997:
  82. - zusΣtzliche Find/FindRev-Funktion ohne
  83.   Rⁿckparameter der gefundenen Stelle
  84.  
  85. 08.02.1997:
  86. - Folgende Funktionen als const definiert:
  87.   Find, FindRev, SFind, SFindRev, IsEmpty, StrCmp,
  88.   Mid, Left, Right, GetLength
  89.   caster: int, long, char etc...
  90. - statt XBOOL jetzt: BOOL aus BOOL.h der STL
  91. - neue Funktion: StripWhitespaces ( int where = XBOTH )
  92.  
  93. 11.02.1997:
  94. - stream-operatoren: << und >>
  95.  
  96. 12.02.1997:
  97. - neue FunktionalitΣt:
  98.   XString k÷nnen "undefiniert" sein, also nicht initialisiert bzw. definiert NULL.
  99.   Der Standardkonstruktor erzeugt einen "undefinierten" String, welcher sich
  100.   aber voll kompatibel zur vorherigen Version zeigt.
  101. - Folgende Funktionen sind daher neu:
  102.   BOOL IsNULL() const;
  103.   void MakeNULL();
  104. - Zur leichterten Lesbarkeit wurde auch die
  105.   "Empty-"FunktionalitΣt ⁿberarbeitet:
  106.    BOOL IsEmpty() const; // wie gehabt
  107.    void MakeEmpty();
  108.  
  109. - sΣmtliche (potentielle) Schreibfunktionen haben als Nachbedingung IsNULL()==false
  110.   (auch DelSubString, +=, MakeUpper, Strip,
  111.   ReleaseBuffer, MakeEmpty)
  112.   ABER: = kopiert Zustand!
  113.  
  114. 13.03.1997:
  115. - Umbenannt:
  116.   sFind -> Search
  117.   sFindRev -> SearchRev
  118. - neue Funktionen:
  119.   FindWhitespace
  120.   SearchWhitespace
  121.  
  122. 24.03,1997:
  123. - NEUE TEMPLATE-CLASS: XSplitableString
  124. - Split // by Separator
  125. - Split // by Whitespaces
  126. - GetTableDatas
  127.  
  128. 02.04.1997:
  129. - verΣnderte Syntax/Semantik von At()
  130.   1) Syntax: char At()
  131.   2) wenn laenge<=index => At()==0
  132.  
  133. 09.07.1997:
  134. - neue Suchfunktion: TurboSearch (vgl. ct' August 1997)
  135. - Vorbereitet fⁿr eigene Malloc-Funktion, um Blockgr÷▀e anzugeben.
  136.   Achtung: Funktionen sind noch nicht implementiert
  137.   ( - GetBlockSize, SetBlockSize)
  138. - folgende Fehler behoben:
  139.   - Zuweisung A=A erzeugte bislang Fehler
  140.   - Konstruktor XString(char) erzeugt Fehler bei XString('\0')
  141. - XSplitableString nun in eigener Datei
  142. - BOOL wird, wenn nicht definiert, als typedef gesetzt.
  143.   Daher wird jetzt hier kein STL-header mehr ben÷tigt, der typedef
  144.   ist aber der gleiche - also eigentlich keine Probleme
  145. - operator char* () geΣndert (keine Left-FunkionalitΣt mehr, wie GetBuffer
  146.  
  147. ****************************************************************************/
  148.  
  149.  
  150. #ifndef _XSTRING_H_
  151. #define _XSTRING_H_
  152.  
  153. #include "xinclude.h"
  154. //#ifndef _MSC_VER
  155. // #include <BOOL.h> // the STL BOOL.h: BOOL, true, false (as int)
  156. /*#else
  157. //#include <yvals.h>
  158. #endif
  159. */
  160.  
  161.  
  162. #include <iostream.h>
  163.  
  164.  
  165. #ifdef _MSC_VER
  166. #pragma warning ( disable : 4237 )
  167. #endif
  168.  
  169.  
  170. //#ifndef BOOL
  171. //   typedef int BOOL;
  172. //#endif
  173.  
  174. #ifndef XBOOL
  175.    #define XBOOL BOOL
  176.    #define XTRUE 1
  177.    #define XFALSE 0
  178. #endif
  179.  
  180. #ifndef true
  181.    #define true 1
  182. #endif
  183.  
  184. #ifndef false
  185.    #define false 0
  186. #endif
  187.  
  188.  
  189. #ifndef NULL
  190.   #define NULL 0
  191. #endif
  192.  
  193. #ifndef XSIZE_T
  194.   #define XSIZE_T unsigned long int
  195. #endif
  196.  
  197. #ifndef XLEFT
  198.   #define XALL 0
  199.   #define XLEFT 1
  200.   #define XRIGHT 2
  201.   #define XBOTH 3
  202. #endif
  203.  
  204. // TBO
  205. #define _XSTRING_DECL_
  206.  
  207. #define _LINK_TO_
  208. // #define _BUILD_DLL_
  209.  
  210. #ifdef _BUILD_DLL_
  211. #undef _XSTRING_DECL_
  212.   #define _XSTRING_DECL_ _declspec (dllexport)
  213. #else
  214.   #ifndef _LINK_TO_
  215.     #undef _XSTRING_DECL_
  216.     #define _XSTRING_DECL_ _declspec (dllimport)
  217.   #endif
  218. #endif
  219.  
  220.  
  221. // TBO
  222. #if !defined( __WATCOMC__ )
  223. class _XSTRING_DECL_ XString: public XObject
  224. #else
  225. class _export_ XString: public XObject
  226. #endif
  227. {
  228. public:
  229.    XString   ();
  230.     XString   (const XString &aString);
  231.  
  232.     XString (char aChar);
  233.    XString (char *pszChar);
  234.     XString (const char *pszChar);
  235.  
  236.     XString (int aNumber, int Radix = 10);
  237.     XString (long aNumber, int Radix = 10);
  238.  
  239.     //virtual
  240.    ~XString ();
  241.  
  242.  
  243. public:
  244.  
  245. /////////////////////////
  246. //  cast - operators
  247.  
  248.    int      MakeInt() const;
  249.     long   MakeLong() const;
  250.     double   MakeDouble() const;
  251.  
  252. /*
  253.    operator const char *const() { return m_pszChar; }//const
  254.     operator char * () const { return m_pszChar; }
  255. operator const char * () { return m_pszChar; }
  256.    const char *const operator() () const { return m_pszChar; }
  257. */
  258.       operator char* () const { return((char*) m_pszChar); }
  259. //TBO
  260. #ifndef __WATCOMC__
  261.       operator const char* () const { return((const char*) m_pszChar); }
  262. #endif
  263.  
  264.  
  265.    const char *const operator() (XSIZE_T inCount); // wie Left
  266.  
  267.     char& operator[] (XSIZE_T inZeroIndex) const; // neu 20.11
  268.    char& operator[] (int inZeroIndex) const;     // neu 20.11
  269.     char At(XSIZE_T inZeroIndex) const;
  270.  
  271. ////////////////////////
  272. //  comparison (- operators)
  273.     XString operator =(const XString &aString);
  274.     virtual int StrCmp(const XString &inThen) const;
  275.  
  276. ////////////////////////
  277. //   Attributs
  278.    virtual  XSIZE_T GetLength() const;
  279.  
  280. ////////////////////////
  281. //  Buffer-Functions
  282.     char* GetBuffer(int Size);
  283.     char* GetBuffer(XSIZE_T Size=0);
  284.     int ReleaseBuffer(XSIZE_T Length=0);
  285.  
  286.    BOOL SetBlockSize(int inBlockSize);
  287.    int GetBlockSize() const;
  288.  
  289. ////////////////////////
  290. //   Operationen
  291.  
  292.     XString operator +=(const XString &Str);
  293.     XString operator +=(const char *Str);
  294.  
  295.    BOOL IsEmpty() const;
  296.    void MakeEmpty();
  297.  
  298.    BOOL IsNULL() const;
  299.    void MakeNULL();
  300.  
  301.     void MakeUpper();
  302.    void MakeLower();
  303.  
  304.     static char UpperChar(char inChar);
  305.  
  306.  
  307. ////////////////////////
  308. //   SubString-Functions
  309.     virtual XString Mid(XSIZE_T From, XSIZE_T Count) const;
  310.     virtual XString Left(XSIZE_T Count) const;
  311.     virtual XString Right(XSIZE_T Count) const;
  312.  
  313.     const XString Insert(const XString& , XSIZE_T);
  314.  
  315.    int DelSubString(XString inSubString);
  316.     int DelSubString(XSIZE_T inFrom, XSIZE_T inCount=1);
  317.  
  318.  
  319. ////////////////////////////////
  320. //  Search & Replace - Functions
  321.  
  322.     BOOL Find(XSIZE_T &outPos, const XString &SubString, XSIZE_T From = 0, XSIZE_T inTo = 0, BOOL inInCase=false) const;
  323.     BOOL FindRev(XSIZE_T &outPos, const XString &SubString, XSIZE_T From = 0, XSIZE_T inTo = 0, BOOL inInCase=false) const;
  324.  
  325. //   BOOL TurboFind(XSIZE_T &outPos, const XString &SubString, XSIZE_T From = 0, XSIZE_T inTo = 0, BOOL inInCase=false, BOOL inInit = true) const;
  326.  
  327.    BOOL Search(const XString &SubString, XSIZE_T From = 0, XSIZE_T inTo = 0, BOOL inInCase=false) const;
  328.     BOOL SearchRev(const XString &SubString, XSIZE_T From = 0, XSIZE_T inTo = 0, BOOL inInCase=false) const;
  329.  
  330.    BOOL FindWhitespace ( XSIZE_T &outPos, XSIZE_T inFrom = 0, XSIZE_T inTo = 0) const;
  331.    BOOL SearchWhitespace ( XSIZE_T inFrom = 0, XSIZE_T inTo = 0) const;
  332.  
  333.    BOOL FindAlpha ( XSIZE_T &outPos, XSIZE_T inFrom = 0, XSIZE_T inTo = 0) const;
  334.    BOOL FindNonAlpha ( XSIZE_T &outPos, XSIZE_T inFrom = 0, XSIZE_T inTo = 0) const;
  335.    BOOL SearchAlpha( XSIZE_T inFrom = 0, XSIZE_T inTo = 0) const;
  336.    BOOL SearchNonAlpha ( XSIZE_T inFrom = 0, XSIZE_T inTo = 0) const;
  337.  
  338.    int Replace(XString inSearch, XString inReplace, int inTimes=XALL, XSIZE_T inFrom=0, XSIZE_T inTo=0, BOOL inInCase=false);
  339.  
  340. /////////////////////////////////
  341. //  Format-Functions
  342.  
  343.     int Strip(int inWhere = XBOTH, char inChar = ' ');
  344.    int StripWhitespaces ( int inWhere = XBOTH );
  345.  
  346.  
  347.  
  348. /////////////////////////
  349. // Friends
  350.  
  351.    /////////////////////////
  352.    //  streams:
  353.    _XSTRING_DECL_ friend ostream& operator<<(ostream&, const XString& );
  354.    _XSTRING_DECL_ friend istream& operator>>(istream&, XString& );
  355.  
  356.    /////////////////////////
  357.    // Compare (weitere Compare-Funktionen stⁿtzen sich
  358.    // auf == und < ab, mⁿssen also keine Friends sein!
  359.    _XSTRING_DECL_ friend XString operator +(const XString Str1, const char *pszChar2);
  360.    _XSTRING_DECL_ friend XString operator +(const char *pszChar1, const XString Str2);
  361.     _XSTRING_DECL_ friend XString operator +(const XString& Str1, const XString& Str2);
  362.  
  363.     _XSTRING_DECL_ friend int operator ==(const XString &inS1, const XString &inS2) ;
  364.    _XSTRING_DECL_ friend int operator ==(const XString &inS1, const char *pszChar2) ;
  365.    _XSTRING_DECL_ friend int operator ==(const char *pszChar1, const XString &inS2) ;
  366.  
  367.    _XSTRING_DECL_ friend int operator <(const XString &inS1, const XString &inS2);
  368.    _XSTRING_DECL_ friend int operator <(const XString &inS1, const char *pszChar2);
  369.    _XSTRING_DECL_ friend int operator <(const char *pszChar1, const XString &inS2);
  370.  
  371. ////////////////
  372. protected:
  373.    XString (char *pszChar, int duplicate);
  374.    char* Malloc(XSIZE_T i_Size);
  375.  
  376. ///////////
  377. protected:
  378.     char   *m_pszChar;
  379.     XSIZE_T m_Length;
  380.    BOOL   m_isNULL;
  381.    int      m_nBlockSize;
  382.  
  383. };
  384.  
  385.  
  386. ////////////////////////////////////////////////
  387. // Friends - Prototypes
  388.  
  389. _XSTRING_DECL_ ostream& operator<<(ostream&, const XString& );
  390. _XSTRING_DECL_ istream& operator>>(istream&, XString& );
  391.  
  392. _XSTRING_DECL_ XString operator +(const XString Str1, const char *pszChar2);
  393. _XSTRING_DECL_ XString operator +(const char *pszChar1, const XString Str2);
  394. _XSTRING_DECL_ XString operator +(const XString& Str1, const XString& Str2);
  395.  
  396. _XSTRING_DECL_ int operator ==(const XString &inS1, const XString &inS2) ;
  397. _XSTRING_DECL_ int operator !=(const XString &inS1, const XString &inS2) ;
  398. _XSTRING_DECL_ int operator <=(const XString &inS1, const XString &inS2);
  399. _XSTRING_DECL_ int operator >=(const XString &inS1, const XString &inS2);
  400. _XSTRING_DECL_ int operator >(const XString &inS1, const XString &inS2);
  401. _XSTRING_DECL_ int operator <(const XString &inS1, const XString &inS2);
  402.  
  403. _XSTRING_DECL_ int operator ==(const XString &inS1, const char *pszChar2) ;
  404. _XSTRING_DECL_ int operator !=(const XString &inS1, const char *pszChar2) ;
  405. _XSTRING_DECL_ int operator <=(const XString &inS1, const char *pszChar2);
  406. _XSTRING_DECL_ int operator >=(const XString &inS1, const char *pszChar2);
  407. _XSTRING_DECL_ int operator >(const XString &inS1, const char *pszChar2);
  408. _XSTRING_DECL_ int operator <(const XString &inS1, const char *pszChar2);
  409.  
  410. _XSTRING_DECL_ int operator ==(const char *pszChar1, const XString &inS2) ;
  411. _XSTRING_DECL_ int operator !=(const char *pszChar1, const XString &inS2) ;
  412. _XSTRING_DECL_ int operator <=(const char *pszChar1, const XString &inS2);
  413. _XSTRING_DECL_ int operator >=(const char *pszChar1, const XString &inS2);
  414. _XSTRING_DECL_ int operator >(const char *pszChar1, const XString &inS2);
  415. _XSTRING_DECL_ int operator <(const char *pszChar1, const XString &inS2);
  416.  
  417.  
  418. _XSTRING_DECL_ int operator ==(const XString &inS1, char *pszChar2) ;
  419. _XSTRING_DECL_ int operator !=(const XString &inS1, char *pszChar2) ;
  420. _XSTRING_DECL_ int operator <=(const XString &inS1, char *pszChar2);
  421. _XSTRING_DECL_ int operator >=(const XString &inS1, char *pszChar2);
  422. _XSTRING_DECL_ int operator >(const XString &inS1, char *pszChar2);
  423. _XSTRING_DECL_ int operator <(const XString &inS1, char *pszChar2);
  424.  
  425. _XSTRING_DECL_ int operator ==(char *pszChar1, const XString &inS2) ;
  426. _XSTRING_DECL_ int operator !=(char *pszChar1, const XString &inS2) ;
  427. _XSTRING_DECL_ int operator <=(char *pszChar1, const XString &inS2);
  428. _XSTRING_DECL_ int operator >=(char *pszChar1, const XString &inS2);
  429. _XSTRING_DECL_ int operator >(char *pszChar1, const XString &inS2);
  430. _XSTRING_DECL_ int operator <(char *pszChar1, const XString &inS2);
  431.  
  432.  
  433.  
  434. #endif
  435.  
  436.  
  437.  
  438.