home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
OS/2 Shareware BBS: 10 Tools
/
10-Tools.zip
/
ool.zip
/
OOL
/
include
/
XSTRING.H
< prev
next >
Wrap
C/C++ Source or Header
|
1997-04-08
|
12KB
|
335 lines
// (C) 1996 Jens von Pilgrim
/*DOC
CLASS XString
Author: Jens von Pilgrim
Last change: 13.03.1997
*/
/*
History
16.08.1995: - FastFind noch nicht ausgereift!
26.03.1996: - XString arbeitet jetzt schneller (Länge wird gespeichert),
nicht mehr "direkt" kompatibel zu pszChar!
- assert-Abfrage wird nur bei definierten DEBUG durchgeführt
27.03.1996: - neuer () Operator: Liefert char-Zeiger zurück,
optionaler Parameter: Count analog zu Left()
- Cast-Operatoren für
XString -> int, const int, long, const long, double, const double
sowie
- Konstruktoren für Zahlen: XString(int|long [,radix])
01.04.1996: - Copy-Konstruktor ohne Speicherreservierung für den Char-String
=> vorsicht! Schnell aber gefährlich!
29.05.1996: - Strip-Funktion
- [] - Operator
- DelSubString
05.06.1996: - Replace
- Bug in Find behoben ( ./ in .../ nicht gefunden!
06.06.1996: - Umstellung: signed nach XSIZE_T bei
Find und m_Length (und allgemein wo From oder To oder so auftauchen!)
=> Umsetllung von Find:
statt: Positon = Find(Was, Von, Bis) nun:
gefunden = Find(Pos, Was, Von, Bis)
Ergebnis: bool (true: Found, false: Not found)
07.06.1996: - operatoren <, <=, >, <= funktionieren jetzt RICHTIG!
06.08.1996: - Anpassungen fⁿr Visual C++ 4.0 (operatoren als Friends...)
- MakeUpper, MakeLower
12.08.1996: - InCase - Flag bei Find/FindRev/Replace
- neue Funktion UpperC
17.10.1006: - diverse Anpassungen fuer Visual C++ 4.0 und XVT
- BOOL (und TRUE, FALSE) werden durch bool, true und false ersetzt
20.11.1996: Anpasungen fⁿr VC4.0:
- Operatoren ==, <=, >=, <, > 3 mal vorhanden:
XString-XString, lpszChar-XString, XString-lpszChar
- []-Operator 3-mal: [XSIZE_T], [ULONG], [int]
20.11.1996: []-Operator liefert Refernez auf Zeichen, so dass
z.B.: A[i]='x' m÷glich ist
01.02.1997: zusΣtzliche Find/FindRev-Funktion ohne
Rⁿckparameter der gefundenen Stelle
08.02.1997: - Folgende Funktionen als const definiert:
Find, FindRev, SFind, SFindRev, IsEmpty, StrCmp,
Mid, Left, Right, GetLength
caster: int, long, char etc...
- statt XBOOL jetzt: bool aus bool.h der STL
- neue Funktion:
StripWhitespaces ( int where = XBOTH )
11.02.1997: - stream-operatoren: << und >>
12.02.1997: - neue FunktionalitΣt:
XString k÷nnen "undefiniert" sein, also
nicht initialisiert bzw. definiert NULL.
Der Standardkonstruktor erzeugt einen
"undefinierten" String, welcher sich
aber voll kompatibel zur vorherigen Version
zeigt.
Folgende Funktionen sind daher neu:
bool IsNULL() const;
void MakeNULL();
Zur leichterten Lesbarkeit wurde auch die
"Empty-"FunktionalitΣt ⁿberarbeitet:
bool IsEmpty() const; // wie gehabt
void MakeEmpty();
sΣmtliche (potentielle) Schreibfunktionen
haben als Nachbedingung IsNULL()==false
(auch DelSubString, +=, MakeUpper, Strip,
ReleaseBuffer, MakeEmpty)
ABER: = kopiert Zustand!
13.03.1997: - Umbenannt:
sFind -> Search
sFindRev -> SearchRev
- neue Funktionen:
FindWhitespace
SearchWhitespace
24.03,1997: - NEUE TEMPLATE-CLASS: XSplitableString
- Split // by Separator
- Split // by Whitespaces
- GetTableDatas
****************************************************************************/
#ifndef _XSTRING_H_
#define _XSTRING_H_
#include "xinclude.h"
#include <iostream.h>
#include <stdarg.h>
#ifndef NULL
#define NULL 0
#endif
#ifndef XLEFT
#define XALL 0
#define XLEFT 1
#define XRIGHT 2
#define XBOTH 3
#endif
class _export_ XString
{
public:
XString();
XString(const XString &aString);
XString(char aChar);
XString(char *pszChar);
XString(const char *pszChar);
XString(int aNumber, int Radix = 10);
XString(long aNumber, int Radix = 10);
virtual ~XString();
protected:
XString(char *pszChar, int duplicate);
public:
/////////////////////////
// cast - operators
// operator const char *const() const;
operator const int() const;
operator const long() const;
operator const double() const;
operator char* () const { return((char*) m_pszChar); }
//TBO
#ifndef __WATCOMC__
operator const char* () const { return((const char*) m_pszChar); }
#endif
char* operator() (XSIZE_T inCount); // == Left(inCount)
char& operator[] (XSIZE_T inZeroIndex) const; // neu 20.11
char& operator[] (int inZeroIndex) const; // neu 20.11
char& At(XSIZE_T inZeroIndex) const;
XString operator =(const XString &aString);
virtual int StrCmp(const XString &inThen) const;
XString operator +=(const XString &Str);
XString operator +=(const char *Str);
virtual XString Mid(XSIZE_T From, XSIZE_T Count) const;
virtual XString Left(XSIZE_T Count) const;
virtual XString Right(XSIZE_T Count) const;
virtual XSIZE_T GetLength() const;
BOOL IsEmpty() const;
void MakeEmpty();
BOOL IsNULL() const;
void MakeNULL();
BOOL Find(XSIZE_T &outPos, const XString &SubString, XSIZE_T From = 0, XSIZE_T inTo = 0, BOOL inInCase=FALSE) const;
BOOL FindRev(XSIZE_T &outPos, const XString &SubString, XSIZE_T From = 0, XSIZE_T inTo = 0, BOOL inInCase=FALSE) const;
BOOL Search(const XString &SubString, XSIZE_T From = 0, XSIZE_T inTo = 0, BOOL inInCase=FALSE) const;
BOOL SearchRev(const XString &SubString, XSIZE_T From = 0, XSIZE_T inTo = 0, BOOL inInCase=FALSE) const;
BOOL FindWhitespace ( XSIZE_T &outPos, XSIZE_T inFrom = 0, XSIZE_T inTo = 0) const;
BOOL SearchWhitespace ( XSIZE_T inFrom = 0, XSIZE_T inTo = 0) const;
BOOL FindAlpha ( XSIZE_T &outPos, XSIZE_T inFrom = 0, XSIZE_T inTo = 0) const;
BOOL FindNonAlpha ( XSIZE_T &outPos, XSIZE_T inFrom = 0, XSIZE_T inTo = 0) const;
BOOL SearchAlpha( XSIZE_T inFrom = 0, XSIZE_T inTo = 0) const;
BOOL SearchNonAlpha ( XSIZE_T inFrom = 0, XSIZE_T inTo = 0) const;
int Strip(int inWhere = XBOTH, char inChar = ' ');
int StripWhitespaces ( int inWhere = XBOTH );
int DelSubString(XString inSubString);
int DelSubString(XSIZE_T inFrom, XSIZE_T inCount=1);
int Replace(XString inSearch, XString inReplace, int inTimes=XALL, XSIZE_T inFrom=0, XSIZE_T inTo=0, BOOL inInCase=FALSE);
char* GetBuffer(int Size);
char* GetBuffer(XSIZE_T Size=0);
int ReleaseBuffer(XSIZE_T Length=0);
void MakeUpper();
void MakeLower();
static char UpperChar(char inChar);
/////////////////////////
// Friends
/////////////////////////
// streams:
// TBO
#ifndef __WATCOMC__
_export_ friend ostream& operator<<(ostream&, const XString& );
_export_ friend istream& operator>>(istream&, XString& );
/////////////////////////
// Compare (weitere Compare-Funktionen stⁿtzen sich
// auf == und < ab, mⁿssen also keine Friends sein!
_export_ friend XString operator +(const XString Str1, const char *pszChar2);
_export_ friend XString operator +(const char *pszChar1, const XString Str2);
_export_ friend XString operator +(const XString& Str1, const XString& Str2);
_export_ friend int operator ==(const XString &inS1, const XString &inS2) ;
_export_ friend int operator ==(const XString &inS1, const char *pszChar2) ;
_export_ friend int operator ==(const char *pszChar1, const XString &inS2) ;
_export_ friend int operator <(const XString &inS1, const XString &inS2);
_export_ friend int operator <(const XString &inS1, const char *pszChar2);
_export_ friend int operator <(const char *pszChar1, const XString &inS2);
#else
friend ostream& _export_ operator<<(ostream&, const XString& );
friend istream& _export_ operator>>(istream&, XString& );
/////////////////////////
// Compare (weitere Compare-Funktionen stⁿtzen sich
// auf == und < ab, mⁿssen also keine Friends sein!
friend XString _export_ operator +(XString Str1, const char *pszChar2);
friend XString _export_ operator +(const char *pszChar1, XString Str2);
friend XString _export_ operator +(XString& Str1, XString& Str2);
friend int _export_ operator ==(const XString &inS1, const XString &inS2) ;
friend int _export_ operator ==(const XString &inS1, const char *pszChar2) ;
friend int _export_ operator ==(const char *pszChar1, const XString &inS2) ;
friend int _export_ operator <(const XString &inS1, const XString &inS2);
friend int _export_ operator <(const XString &inS1, const char *pszChar2);
friend int _export_ operator <(const char *pszChar1, const XString &inS2);
#endif
////////////////
private:
char *m_pszChar;
XSIZE_T m_Length;
BOOL m_isNULL;
};
////////////////////////////////////////////////
// Friends - Prototypes
// TBO
#ifndef __WATCOMC__
_export_ ostream& operator<<(ostream&, const XString& );
_export_ istream& operator>>(istream&, XString& );
_export_ XString operator +(const XString Str1, const char *pszChar2);
_export_ XString operator +(const char *pszChar1, const XString Str2);
_export_ XString operator +(const XString& Str1, const XString& Str2);
_export_ int operator ==(const XString &inS1, const XString &inS2) ;
_export_ int operator !=(const XString &inS1, const XString &inS2) ;
_export_ int operator <=(const XString &inS1, const XString &inS2);
_export_ int operator >=(const XString &inS1, const XString &inS2);
_export_ int operator >(const XString &inS1, const XString &inS2);
_export_ int operator <(const XString &inS1, const XString &inS2);
_export_ int operator ==(const XString &inS1, const char *pszChar2) ;
_export_ int operator !=(const XString &inS1, const char *pszChar2) ;
_export_ int operator <=(const XString &inS1, const char *pszChar2);
_export_ int operator >=(const XString &inS1, const char *pszChar2);
_export_ int operator >(const XString &inS1, const char *pszChar2);
_export_ int operator <(const XString &inS1, const char *pszChar2);
_export_ int operator ==(const char *pszChar1, const XString &inS2) ;
_export_ int operator !=(const char *pszChar1, const XString &inS2) ;
_export_ int operator <=(const char *pszChar1, const XString &inS2);
_export_ int operator >=(const char *pszChar1, const XString &inS2);
_export_ int operator >(const char *pszChar1, const XString &inS2);
_export_ int operator <(const char *pszChar1, const XString &inS2);
#else
ostream& _export_ operator<<(ostream&, const XString& );
istream& _export_ operator>>(istream&, XString& );
XString _export_ operator +(XString Str1, const char *pszChar2);
XString _export_ operator +(const char *pszChar1, XString Str2);
XString _export_ operator +(XString& Str1, XString& Str2);
int _export_ operator ==(const XString &inS1, const XString &inS2) ;
int _export_ operator !=(const XString &inS1, const XString &inS2) ;
int _export_ operator <=(const XString &inS1, const XString &inS2);
int _export_ operator >=(const XString &inS1, const XString &inS2);
int _export_ operator >(const XString &inS1, const XString &inS2);
int _export_ operator <(const XString &inS1, const XString &inS2);
int _export_ operator ==(const XString &inS1, const char *pszChar2) ;
int _export_ operator !=(const XString &inS1, const char *pszChar2) ;
int _export_ operator <=(const XString &inS1, const char *pszChar2);
int _export_ operator >=(const XString &inS1, const char *pszChar2);
int _export_ operator >(const XString &inS1, const char *pszChar2);
int _export_ operator <(const XString &inS1, const char *pszChar2);
int _export_ operator ==(const char *pszChar1, const XString &inS2) ;
int _export_ operator !=(const char *pszChar1, const XString &inS2) ;
int _export_ operator <=(const char *pszChar1, const XString &inS2);
int _export_ operator >=(const char *pszChar1, const XString &inS2);
int _export_ operator >(const char *pszChar1, const XString &inS2);
int _export_ operator <(const char *pszChar1, const XString &inS2);
#endif
#endif