ultimatepp/uppdev/NewCore/AString.h
cxl 4a1c627474 Adding uppdev....
git-svn-id: svn://ultimatepp.org/upp/trunk@328 f0d560ea-af0d-0410-9eb7-867de7ffcac7
2008-08-15 08:36:24 +00:00

101 lines
5.8 KiB
C++

#ifndef _NewCore_AString_h_
#define _NewCore_AString_h_
template <class B>
class AString : public B {
typedef typename B::tchar tchar;
typedef typename B::bchar bchar;
typedef typename B::Buffer buffer;
typedef typename B::String String;
public:
void Clear() { B::Free(); B::Zero(); }
int GetLength() const { return GetCount(); }
const tchar *End() const { return B::Begin() + B::GetLength(); }
int operator[](int i) const { ASSERT(i >= 0 && i <= GetCount()); return Begin()[i]; }
operator const tchar *() const { return B::Begin(); }
const tchar *operator~() const { return B::Begin(); }
operator const bchar *() const { return (bchar *)B::Begin(); }
operator const void *() const { return B::Begin(); }
void Insert(int pos, int c) { *B::Insert(pos, 1, NULL) = c; }
void Insert(int pos, const tchar *s, int count) { B::Insert(pos, count, s); }
void Insert(int pos, const String& s) { Insert(pos, s, s.GetCount()); }
void Insert(int pos, const char *s) { Insert(pos, s, strlen(s)); }
void Cat(int c) { B::Cat(c); }
void Cat(const tchar *s, int len) { B::Cat(s, len); }
void Cat(const tchar *s) { Cat(s, strlen__(s)); }
void Cat(const String& s) { Cat(~s, s.GetLength()); }
void Cat(int c, int count);
void Cat(const tchar *s, const tchar *lim) { ASSERT(s <= lim); Cat(s, lim - s); }
void Cat(const String& s, int len) { B::Cat(~s, len); }
void Cat(const bchar *s, int len) { Cat((const tchar *) s, len); }
String& Cat() { return *this; }
int Compare(const String& s) const;
int Compare(const char *s) const;
bool IsEqual(const String& s) const { return B::IsEqual(s); }
bool IsEqual(const char *s) const { return Compare(s) == 0; }
String Mid(int pos, int length) const;
String Mid(int pos) const { return Mid(pos, GetLength() - pos); }
String Right(int count) const { return Mid(GetLength() - count); }
String Left(int count) const { return Mid(0, count); }
int Find(int chr, int from = 0) const;
int ReverseFind(int chr, int from) const;
int ReverseFind(int chr) const;
int Find(int len, const tchar *s, int from) const;
int Find(const tchar *s, int from = 0) const;
int Find(const String& s, int from = 0) const { return Find(s.GetCount(), ~s, from); }
bool StartsWith(const tchar *s, int len) const;
bool StartsWith(const tchar *s) const { return StartsWith(s, strlen__(s)); }
bool StartsWith(const String& s) const { return StartsWith(~s, s.GetLength()); }
bool EndsWith(const tchar *s, int len) const;
bool EndsWith(const tchar *s) const { return EndsWith(s, strlen__(s)); }
bool EndsWith(const String& s) const { return EndsWith(~s, s.GetLength()); }
void Shrink() { return *this = String(Begin(), GetLength()); }
friend bool operator<(const String& a, const String& b) { return a.Compare(b) < 0; }
friend bool operator<(const String& a, const tchar *b) { return a.Compare(b) < 0; }
friend bool operator<(const tchar *a, const String& b) { return b.Compare(a) > 0; }
friend bool operator<=(const String& a, const String& b) { return a.Compare(b) <= 0; }
friend bool operator<=(const String& a, const tchar *b) { return a.Compare(b) <= 0; }
friend bool operator<=(const tchar *a, const String& b) { return b.Compare(a) >= 0; }
friend bool operator>(const String& a, const String& b) { return a.Compare(b) > 0; }
friend bool operator>(const String& a, const tchar *b) { return a.Compare(b) > 0; }
friend bool operator>(const tchar *a, const String& b) { return b.Compare(a) < 0; }
friend bool operator>=(const String& a, const String& b) { return a.Compare(b) >= 0; }
friend bool operator>=(const String& a, const tchar *b) { return a.Compare(b) >= 0; }
friend bool operator>=(const tchar *a, const String& b) { return b.Compare(a) <= 0; }
friend bool operator==(const String& a, const String& b) { return a.IsEqual(b); }
friend bool operator!=(const String& a, const String& b) { return !a.IsEqual(b); }
friend bool operator==(const String& a, const tchar *b) { return a.Compare(b) == 0; }
friend bool operator==(const tchar *a, const String& b) { return b.Compare(a) == 0; }
friend bool operator!=(const String& a, const tchar *b) { return a.Compare(b) != 0; }
friend bool operator!=(const tchar *a, const String& b) { return b.Compare(a) != 0; }
friend String operator+(const String& a, const String& b) { String c(a); c += b; return c; }
friend String operator+(const String& a, const tchar *b) { String c(a); c += b; return c; }
friend String operator+(const tchar *a, const String& b) { String c(a); c += b; return c; }
friend String operator+(const String& a, int b) { String c(a); c += b; return c; }
friend String operator+(int a, const String& b) { String c(a, 1); c += b; return c; }
friend String operator+(const String& a, tchar b) { String c(a); c += b; return c; }
friend String operator+(tchar a, const String& b) { String c(a, 1); c += b; return c; }
};
#endif