diff options
Diffstat (limited to 'akregator/src/mk4storage/metakit/include/mk4str.h')
-rw-r--r-- | akregator/src/mk4storage/metakit/include/mk4str.h | 181 |
1 files changed, 181 insertions, 0 deletions
diff --git a/akregator/src/mk4storage/metakit/include/mk4str.h b/akregator/src/mk4storage/metakit/include/mk4str.h new file mode 100644 index 00000000..7124a29e --- /dev/null +++ b/akregator/src/mk4storage/metakit/include/mk4str.h @@ -0,0 +1,181 @@ +// mk4str.h -- +// $Id$ +// This is part of Metakit, see http://www.equi4.com/metakit/ + +/** @file + * Declarations of the string package. + */ + +#ifndef __MK4STR_H__ +#define __MK4STR_H__ + +///////////////////////////////////////////////////////////////////////////// + +#if q4_MFC // Microsoft Foundation Classes + +#ifdef _WINDOWS +#include <afxwin.h> +#else +#include <afxcoll.h> +#endif + +#if _MSC_VER == 800 +// MSVC 1.52 thinks a typedef has no constructor, use define instead +#define c4_String CString +#elif _MSC_VER >= 1300 +// VC 7.0 does not like "class" (6-2-2002, Zhang Dehua) +typedef CString c4_String; +#else +typedef class CString c4_String; +#endif + +#elif q4_STD // STL and standard strings + +#include <string> + +#if !defined (d4_std) // the default is to use namespaces +#define d4_std std +#endif + + /// STL-based string class, modeled after the MFC version +class c4_String : public d4_std::string +{ + typedef d4_std::string string; + +public: + c4_String (); + c4_String (char ch, int nDup =1); + c4_String (const char* str); + c4_String (const void* ptr, int len); + c4_String (const d4_std::string& s); + c4_String (const c4_String& s); + ~c4_String (); + + const c4_String& operator= (const c4_String&); + + operator const char* () const; + + char operator[] (int i) const; + + friend c4_String operator+ (const c4_String&, const c4_String&); + friend c4_String operator+ (const c4_String&, const char*); + friend c4_String operator+ (const char*, const c4_String&); + + const c4_String& operator+= (const c4_String& s); + const c4_String& operator+= (const char* s); + + int GetLength() const; + bool IsEmpty() const; + void Empty(); + + c4_String Mid(int nFirst, int nCount =25000) const; + c4_String Left(int nCount) const; + c4_String Right(int nCount) const; + + int Compare(const char* str) const; + int CompareNoCase(const char* str) const; + + bool operator< (const c4_String& str) const; + + int Find(char ch) const; + int ReverseFind(char ch) const; + int FindOneOf(const char* set) const; + + int Find(const char* sub) const; + + c4_String SpanIncluding(const char* set) const; + c4_String SpanExcluding(const char* set) const; +}; + +bool operator== (const c4_String&, const c4_String&); +bool operator!= (const c4_String&, const c4_String&); + +d4_inline bool operator== (const c4_String& s1, const char* s2); +d4_inline bool operator== (const char* s1, const c4_String& s2); + +d4_inline bool operator!= (const c4_String& s1, const char* s2); +d4_inline bool operator!= (const char* s1, const c4_String& s2); + +#else // Universal replacement classes + + /// An efficient string class, modeled after the MFC version +class c4_String +{ +public: + c4_String (); + c4_String (char ch, int nDup =1); + c4_String (const char* str); + c4_String (const unsigned char* str); + c4_String (const void* ptr, int len); + c4_String (const c4_String& s); + ~c4_String (); + + const c4_String& operator= (const c4_String&); + + operator const char* () const; + operator const unsigned char* () const; + + char operator[] (int i) const; + + friend c4_String operator+ (const c4_String&, const c4_String&); + friend c4_String operator+ (const c4_String&, const char*); + friend c4_String operator+ (const char*, const c4_String&); +// friend c4_String operator+ (const c4_String&, char); +// friend c4_String operator+ (char, const c4_String&); + + const c4_String& operator+= (const c4_String& s); + const c4_String& operator+= (const char* s); +// const c4_String& operator+= (char c); + + int GetLength() const; + bool IsEmpty() const; + void Empty(); // free up the data + + c4_String Mid(int nFirst, int nCount =25000) const; + c4_String Left(int nCount) const; // first nCount chars + c4_String Right(int nCount) const; // last nCount chars + + friend bool operator== (const c4_String&, const c4_String&); // memcmp + friend bool operator!= (const c4_String&, const c4_String&); // opposite + + // only defined for strings having no zero bytes inside them: + + int Compare(const char* str) const; // strcmp + int CompareNoCase(const char* str) const; // stricmp + + bool operator< (const c4_String& str) const; + + int Find(char ch) const; // strchr + int ReverseFind(char ch) const; // strrchr + int FindOneOf(const char* set) const; // strpbrk + + int Find(const char* sub) const; // strstr + + c4_String SpanIncluding(const char* set) const; // strspn + c4_String SpanExcluding(const char* set) const; // strcspn + +private: + void Init(const void* p, int n); + const char* Data() const; + int FullLength() const; + + unsigned char* _value; +}; + +bool operator== (const c4_String& s1, const char* s2); +bool operator== (const char* s1, const c4_String& s2); + +bool operator!= (const c4_String& s1, const char* s2); +bool operator!= (const char* s1, const c4_String& s2); + +#endif // q4_MFC elif q4_STD else q4_UNIV + +///////////////////////////////////////////////////////////////////////////// + +#if q4_INLINE +#include "mk4str.inl" +#endif + +///////////////////////////////////////////////////////////////////////////// + +#endif // __MK4STR_H__ |