#ifndef _DOM_DOMString_h_
#define _DOM_DOMString_h_
#include <qstring.h>
#include <xml/dom_stringimpl.h>
namespace khtml {
class Length;
}
namespace DOM {
class DOMStringImpl;
class DOMString
{
friend class CharacterDataImpl;
friend bool operator==( const DOMString &a, const char *b );
friend bool operator==( const DOMString &a, const DOMString &b );
public:
DOMString() : impl(0) { }
DOMString(const QChar *str, uint len);
DOMString(const QString &);
DOMString(const char *str);
DOMString(DOMStringImpl *i);
~DOMString() { if(impl) impl->deref(); }
DOMString(const DOMString &str);
DOMString &operator =(const DOMString &str);
DOMString &operator += (const DOMString &str);
void insert(DOMString str, uint pos);
const QChar &operator [](unsigned int i) const;
int find(const QChar c, int start = 0) const;
uint length() const;
void truncate( unsigned int len );
void remove(unsigned int pos, int len=1);
DOMString substring(unsigned int pos, unsigned int len) const;
DOMString split(unsigned int pos);
DOMString lower() const;
DOMString upper() const;
QChar *unicode() const;
QString string() const;
int toInt() const;
khtml::Length* toLengthArray(int& len) const;
bool percentage(int &_percentage) const;
DOMString copy() const;
bool isNull() const { return (impl == 0); }
bool isEmpty() const;
DOMStringImpl *implementation() const { return impl; }
#ifdef __OBJC__
DOMString(NSString *);
operator NSString *() const;
#endif
#ifndef NDEBUG
const char *ascii() const;
#endif
protected:
DOMStringImpl *impl;
};
DOMString operator + (const DOMString &a, const DOMString &b);
bool operator==( const DOMString &a, const QString &b );
bool operator==( const DOMString &a, const char *b );
inline bool operator==( const QString &b, const DOMString &a ) { return a == b; }
inline bool operator==( const char *b, const DOMString &a ) { return a == b; }
inline bool operator!=( const DOMString &a, const DOMString &b ) { return !(a==b); }
inline bool operator!=( const DOMString &a, const QString &b ) { return !(a==b); }
inline bool operator!=( const DOMString &a, const char *b ) { return !(a==b); }
inline bool operator!=( const QString &b, const DOMString &a ) { return !(a==b); }
inline bool operator!=( const char *b, const DOMString &a ) { return !(a==b); }
inline bool strcmp( const DOMString &a, const DOMString &b ) { return a != b; }
bool strcasecmp( const DOMString &a, const DOMString &b );
bool strcasecmp( const DOMString& a, const char* b );
};
#endif