/**************************************************************************** ** ** Definition of the extended char array operations, ** and TQByteArray and TQCString classes ** ** Created : 920609 ** ** Copyright (C) 2010 Timothy Pearson and (C) 1992-2008 Trolltech ASA. ** ** This file is part of the tools module of the TQt GUI Toolkit. ** ** This file may be used under the terms of the GNU General ** Public License versions 2.0 or 3.0 as published by the Free ** Software Foundation and appearing in the files LICENSE.GPL2 ** and LICENSE.GPL3 included in the packaging of this file. ** Alternatively you may (at your option) use any later version ** of the GNU General Public License if such license has been ** publicly approved by Trolltech ASA (or its successors, if any) ** and the KDE Free TQt Foundation. ** ** Please review the following information to ensure GNU General ** Public Licensing requirements will be met: ** http://trolltech.com/products/qt/licenses/licensing/opensource/. ** If you are unsure which license is appropriate for your use, please ** review the following information: ** http://trolltech.com/products/qt/licenses/licensing/licensingoverview ** or contact the sales department at sales@trolltech.com. ** ** This file may be used under the terms of the Q Public License as ** defined by Trolltech ASA and appearing in the file LICENSE.TQPL ** included in the packaging of this file. Licensees holding valid TQt ** Commercial licenses may use this file in accordance with the TQt ** Commercial License Agreement provided with the Software. ** ** This file is provided "AS IS" with NO WARRANTY OF ANY KIND, ** INCLUDING THE WARRANTIES OF DESIGN, MERCHANTABILITY AND FITNESS FOR ** A PARTICULAR PURPOSE. Trolltech reserves all rights not granted ** herein. ** **********************************************************************/ #ifndef TQCSTRING_H #define TQCSTRING_H #include "tqtglobaldefines.h" #ifndef TQT_H #include "tqmemarray.h" #endif // TQT_H #include #ifdef USE_QT4 #include #include #include #endif // USE_QT4 /***************************************************************************** Safe and portable C string functions; extensions to standard string.h *****************************************************************************/ TQ_EXPORT void *tqmemmove( void *dst, const void *src, uint len ); TQ_EXPORT char *tqstrdup( const char * ); TQ_EXPORT inline uint tqstrlen( const char *str ) { return str ? (uint)strlen(str) : 0u; } TQ_EXPORT inline char *tqstrcpy( char *dst, const char *src ) { return src ? strcpy(dst, src) : 0; } TQ_EXPORT char *tqstrncpy( char *dst, const char *src, uint len ); TQ_EXPORT inline int tqstrcmp( const char *str1, const char *str2 ) { return ( str1 && str2 ) ? strcmp( str1, str2 ) : ( str1 ? 1 : ( str2 ? -1 : 0 ) ); } TQ_EXPORT inline int tqstrncmp( const char *str1, const char *str2, uint len ) { return ( str1 && str2 ) ? strncmp( str1, str2, len ) : ( str1 ? 1 : ( str2 ? -1 : 0 ) ); } TQ_EXPORT int tqstricmp( const char *, const char * ); TQ_EXPORT int tqstrnicmp( const char *, const char *, uint len ); #ifndef TQT_CLEAN_NAMESPACE TQ_EXPORT inline uint cstrlen( const char *str ) { return (uint)strlen(str); } TQ_EXPORT inline char *cstrcpy( char *dst, const char *src ) { return strcpy(dst,src); } TQ_EXPORT inline int cstrcmp( const char *str1, const char *str2 ) { return strcmp(str1,str2); } TQ_EXPORT inline int cstrncmp( const char *str1, const char *str2, uint len ) { return strncmp(str1,str2,len); } #endif // qChecksum: Internet checksum TQ_EXPORT TQ_UINT16 qChecksum( const char *s, uint len ); /***************************************************************************** TQByteArray class *****************************************************************************/ #ifdef USE_QT4 // NOTE: Qt4 uses implicit sharing // Qt3 used explicit sharing class TQ_EXPORT TQByteArray : public QByteArray { public: TQByteArray() : QByteArray() {} TQByteArray( int size ) : QByteArray( size, '\0' ) {} ~TQByteArray(); TQByteArray(const char *cs) : QByteArray( cs ) {} TQByteArray(const char *cs, int size) : QByteArray( cs, size ) {} TQByteArray(int size, char c) : QByteArray( size, c ) {} TQByteArray(int size, Qt::Initialization init ) : QByteArray( size, init ) {} TQByteArray(const TQByteArray &ba ) : QByteArray( ba/*.data(), ba.size()*/ ) {} TQByteArray(const QByteArray &ba ) : QByteArray( ba/*.data(), ba.size()*/ ) {} inline char *data() { if (isNull()) return 0; return QByteArray::data(); } inline const char *data() const { if (isNull()) return 0; return QByteArray::data(); } inline const char *constData() const { if (isNull()) return 0; return QByteArray::constData(); } inline TQByteArray& assign( const TQByteArray& a ) { *this->operator=(a); return *this; } inline TQByteArray& assign( const char *a, uint n ) { clear(); resize(n); insert(0, a, n); return *this; } inline TQByteArray& duplicate(const TQByteArray& a) { *this = a; return *this; } inline TQByteArray& duplicate(const char *a, uint n) { *this = TQByteArray(a, n); return *this; } inline bool fill( char ch, int size = -1 ) { QByteArray::fill(ch, size); return TRUE; } inline void resetRawData(const char *, uint) { clear(); } inline QByteArray& setRawData(const char *a, uint n) { *this = fromRawData(a, n); return *this; } // Yes, I know about the built-in Qt4 version of this function. It is potentially unstable (corrupts memory) as of Qt4.7 and should not yet be used. Reevaluate this at Qt4.8 or above. [FIXME] inline QByteArray lower() const { return toLower(); } inline QByteArray upper() const { return toUpper(); } inline QByteArray stripWhiteSpace() const { return trimmed(); } inline QByteArray simplifyWhiteSpace() const { return simplified(); } inline int tqfind(int c, int from = 0) const { return indexOf(c, from); } inline int tqfind(char c, int from = 0) const { return indexOf(c, from); } inline int tqfind(const char *c, int from = 0) const { return indexOf(c, from); } inline int tqfind(const QByteArray &ba, int from = 0) const { return indexOf(ba, from); } inline int tqfindRev(char c, int from = -1) const { return lastIndexOf(c, from); } inline int tqfindRev(const char *c, int from = -1) const { return lastIndexOf(c, from); } inline int tqfindRev(const QByteArray &ba, int from = -1) const { return lastIndexOf(ba, from); } #ifndef QT_NO_CAST_TO_ASCII inline int tqfind(const QString &s, int from = 0) const; inline int tqfindRev(const QString &s, int from = -1) const; #endif inline TQByteArray copy() const { return TQByteArray(*this); } inline QByteRef tqat( int i ) { // #ifdef TQT_CHECK_RANGE if ( (i >= size()) || (i < 0) ) { qWarning( "TQByteArray::tqat: Absolute index %d out of range", i ); i = 0; } // #endif return QByteArray::operator[](i); } inline bool tqresize( uint newlen ) { resize(newlen); return true; } inline bool tqresize( uint newlen, TQGArray::Optimization ) { resize(newlen); return true; } inline char &operator[]( int i ) { // #ifdef TQT_CHECK_RANGE if ( (i >= size()) || (i < 0) ) { qWarning( "TQByteArray::operator[]: Absolute index %d out of range", i ); i = 0; } // #endif return *(this->data()+i); } using QByteArray::operator=; // Interoperability // static const TQByteArray& convertFromQByteArray( QByteArray& qba ); static const TQByteArray convertFromQByteArray( QByteArray& qba ); }; // Interoperability // inline static const TQByteArray& convertFromQByteArray( const QByteArray& qba ) { // return (*static_cast(&qba)); // } inline static const TQByteArray convertFromQByteArray( const QByteArray& qba ) { return TQByteArray(qba); } #ifndef TQT_NO_COMPRESS TQ_EXPORT TQByteArray tqCompress( const uchar* data, int nbytes ); TQ_EXPORT TQByteArray tqUncompress( const uchar* data, int nbytes ); TQ_EXPORT inline TQByteArray tqCompress( const TQByteArray& data) { return tqCompress( (const uchar*)data.data(), data.size() ); } TQ_EXPORT inline TQByteArray tqUncompress( const TQByteArray& data ) { return tqUncompress( (const uchar*)data.data(), data.size() ); } #endif /***************************************************************************** TQByteArray stream functions *****************************************************************************/ #ifndef TQT_NO_DATASTREAM TQ_EXPORT TQDataStream &operator<<( TQDataStream &tqds, const TQByteArray &tqba ); TQ_EXPORT TQDataStream &operator>>( TQDataStream &tqds, TQByteArray &tqba ); #endif #else // USE_QT4 #if defined(TQ_TQDOC) /* We want qdoc to document TQByteArray as a real class that inherits TQMemArray and that is inherited by TQBitArray. */ class TQByteArray : public TQMemArray { public: TQByteArray(); TQByteArray( int size ); }; #else typedef TQMemArray TQByteArray; #endif #ifndef TQT_NO_COMPRESS TQ_EXPORT TQByteArray tqCompress( const uchar* data, int nbytes ); TQ_EXPORT TQByteArray tqUncompress( const uchar* data, int nbytes ); TQ_EXPORT inline TQByteArray tqCompress( const TQByteArray& data) { return tqCompress( (const uchar*)data.data(), data.size() ); } TQ_EXPORT inline TQByteArray tqUncompress( const TQByteArray& data ) { return tqUncompress( (const uchar*)data.data(), data.size() ); } #endif /***************************************************************************** TQByteArray stream functions *****************************************************************************/ #ifndef TQT_NO_DATASTREAM TQ_EXPORT TQDataStream &operator<<( TQDataStream &, const TQByteArray & ); TQ_EXPORT TQDataStream &operator>>( TQDataStream &, TQByteArray & ); #endif #endif // USE_QT4 /***************************************************************************** TQCString class *****************************************************************************/ // #ifdef USE_QT4 #if 0 #include #include QT_BEGIN_HEADER QT_BEGIN_NAMESPACE QT_MODULE(Qt3SupportLight) /***************************************************************************** QCString class *****************************************************************************/ class QRegExp; class TQCString : public TQByteArray { public: TQCString() : TQByteArray() {} TQCString(int size); TQCString(const TQCString &s) : TQByteArray(s) {} TQCString(const QByteArray &ba) : TQByteArray(ba.constData()) {} TQCString(const char *str); TQCString(const char *str, uint maxlen); ~TQCString(); TQCString &operator=(const TQCString &s); TQCString &operator=(const char *str); TQCString &operator=(const QByteArray &ba); TQCString copy() const { return *this; } TQCString &sprintf(const char *format, ...); TQCString left(uint len) const { return QByteArray::left(len); } TQCString right(uint len) const { return QByteArray::right(len); } TQCString mid(uint index, uint len=0xffffffff) const { return QByteArray::mid(index, len); } TQCString leftJustify(uint width, char fill=' ', bool trunc=false)const; TQCString rightJustify(uint width, char fill=' ',bool trunc=false)const; TQCString lower() const { return QByteArray::toLower(); } TQCString upper() const { return QByteArray::toUpper(); } TQCString stripWhiteSpace() const { return QByteArray::trimmed(); } TQCString simplifyWhiteSpace() const { return QByteArray::simplified(); } uint length() const; bool truncate( uint pos ); TQCString &insert(uint index, const char *c) { QByteArray::insert(index, c); return *this; } TQCString &insert(uint index, char c) { QByteArray::insert(index, c); return *this; } TQCString &append(const char *c) { QByteArray::append(c); return *this; } TQCString &prepend(const char *c) { QByteArray::prepend(c); return *this; } TQCString &remove(uint index, uint len) { QByteArray::remove(index, len); return *this; } TQCString &tqreplace(uint index, uint len, const char *c) { TQByteArray::replace(index, len, c); return *this; } TQCString &tqreplace(char c, const TQCString &after) { return tqreplace(c, after.constData()); } TQCString &tqreplace(char c, const char *after) { QByteArray::replace(c, after); return *this; } TQCString &tqreplace(const TQCString &b, const TQCString &a) { return tqreplace(b.constData(), a.constData()); } TQCString &tqreplace(const char *b, const char *a) { QByteArray::replace(b, a); return *this; } TQCString &tqreplace(char b, char a) { QByteArray::replace(b, a); return *this; } short toShort(bool *ok=0) const; ushort toUShort(bool *ok=0) const; int toInt(bool *ok=0) const; uint toUInt(bool *ok=0) const; long toLong(bool *ok=0) const; ulong toULong(bool *ok=0) const; float toFloat(bool *ok=0) const; double toDouble(bool *ok=0) const; TQCString &setStr(const char *s) { *this = s; return *this; } TQCString &setNum(short); TQCString &setNum(ushort); TQCString &setNum(int); TQCString &setNum(uint); TQCString &setNum(long); TQCString &setNum(ulong); TQCString &setNum(float, char f='g', int prec=6); TQCString &setNum(double, char f='g', int prec=6); bool setExpand(uint index, char c); int tqcontains( char c, bool cs=TRUE ) const; int tqcontains( const char *str, bool cs=TRUE ) const; #ifndef TQT_NO_REGEXP int tqcontains( const QRegExp & ) const; #endif int tqfind( char c, int index=0, bool cs=TRUE ) const; int tqfind( const char *str, int index=0, bool cs=TRUE ) const; #ifndef TQT_NO_REGEXP int tqfind( const QRegExp &re, int index=0 ) const; #endif #ifndef TQT_NO_REGEXP TQCString &tqreplace( const QRegExp &, const char * ); #endif // inline const char * tqstringFromPos( int index ) { const char & ref = (*this)[index]; return &ref; } inline const char * tqstringFromPos( int index ) { return constData() + index; } operator const char *() const; TQCString &operator+=( const char *str ); TQCString &operator+=( char c ); TQCString &operator+=( const QString qs ); TQCString &operator+=( const QByteArray qba ); TQCString &operator+=( const TQCString tqcs ); private: int tqfind( const char *str, int index, bool cs, uint l ) const; }; inline TQCString::operator const char *() const { return (const char *)data(); } /***************************************************************************** TQCString stream functions *****************************************************************************/ #ifndef QT_NO_DATASTREAM QDataStream &operator<<(QDataStream &d, const TQCString &s); QDataStream &operator>>(QDataStream &d, TQCString &s); TQDataStream &operator<<(TQDataStream &d, const TQCString &s); TQDataStream &operator>>(TQDataStream &d, TQCString &s); #endif /***************************************************************************** TQCString inline functions *****************************************************************************/ inline TQCString &TQCString::setNum(short n) { return setNum(long(n)); } inline TQCString &TQCString::setNum(ushort n) { return setNum(ulong(n)); } inline TQCString &TQCString::setNum(int n) { return setNum(long(n)); } inline TQCString &TQCString::setNum(uint n) { return setNum(ulong(n)); } inline TQCString &TQCString::setNum(float n, char f, int prec) { return setNum(double(n),f,prec); } /***************************************************************************** TQCString non-member operators *****************************************************************************/ Q_COMPAT_EXPORT inline bool operator==(const TQCString &s1, const TQCString &s2) { return tqstrcmp(s1, s2) == 0; } Q_COMPAT_EXPORT inline bool operator==(const TQCString &s1, const char *s2) { return tqstrcmp(s1, s2) == 0; } Q_COMPAT_EXPORT inline bool operator==(const char *s1, const TQCString &s2) { return tqstrcmp(s1, s2) == 0; } Q_COMPAT_EXPORT inline bool operator!=(const TQCString &s1, const TQCString &s2) { return tqstrcmp(s1, s2) != 0; } Q_COMPAT_EXPORT inline bool operator!=(const TQCString &s1, const char *s2) { return tqstrcmp(s1, s2) != 0; } Q_COMPAT_EXPORT inline bool operator!=(const char *s1, const TQCString &s2) { return tqstrcmp(s1, s2) != 0; } Q_COMPAT_EXPORT inline bool operator<(const TQCString &s1, const TQCString& s2) { return tqstrcmp(s1, s2) < 0; } Q_COMPAT_EXPORT inline bool operator<(const TQCString &s1, const char *s2) { return tqstrcmp(s1, s2) < 0; } Q_COMPAT_EXPORT inline bool operator<(const char *s1, const TQCString &s2) { return tqstrcmp(s1, s2) < 0; } Q_COMPAT_EXPORT inline bool operator<=(const TQCString &s1, const TQCString &s2) { return tqstrcmp(s1, s2) <= 0; } Q_COMPAT_EXPORT inline bool operator<=(const TQCString &s1, const char *s2) { return tqstrcmp(s1, s2) <= 0; } Q_COMPAT_EXPORT inline bool operator<=(const char *s1, const TQCString &s2) { return tqstrcmp(s1, s2) <= 0; } Q_COMPAT_EXPORT inline bool operator>(const TQCString &s1, const TQCString &s2) { return tqstrcmp(s1, s2) > 0; } Q_COMPAT_EXPORT inline bool operator>(const TQCString &s1, const char *s2) { return tqstrcmp(s1, s2) > 0; } Q_COMPAT_EXPORT inline bool operator>(const char *s1, const TQCString &s2) { return tqstrcmp(s1, s2) > 0; } Q_COMPAT_EXPORT inline bool operator>=(const TQCString &s1, const TQCString& s2) { return tqstrcmp(s1, s2) >= 0; } Q_COMPAT_EXPORT inline bool operator>=(const TQCString &s1, const char *s2) { return tqstrcmp(s1, s2) >= 0; } Q_COMPAT_EXPORT inline bool operator>=(const char *s1, const TQCString &s2) { return tqstrcmp(s1, s2) >= 0; } Q_COMPAT_EXPORT inline const TQCString operator+(const TQCString &s1, const TQCString &s2) { TQCString tmp(s1); tmp += s2; return tmp; } Q_COMPAT_EXPORT inline const TQCString operator+(const TQCString &s1, const QByteArray &s2) { QByteArray tmp(s1); tmp += s2; return tmp; } Q_COMPAT_EXPORT inline const TQCString operator+(const QByteArray &s1, const TQCString &s2) { QByteArray tmp(s1); tmp += s2; return tmp; } Q_COMPAT_EXPORT inline const TQCString operator+(const TQCString &s1, const char *s2) { TQCString tmp(s1); tmp += s2; return tmp; } Q_COMPAT_EXPORT inline const TQCString operator+(const char *s1, const TQCString &s2) { TQCString tmp(s1); tmp += s2; return tmp; } Q_COMPAT_EXPORT inline const TQCString operator+(const TQCString &s1, char c2) { TQCString tmp(s1); tmp += c2; return tmp; } Q_COMPAT_EXPORT inline const TQCString operator+(char c1, const TQCString &s2) { TQCString tmp; tmp += c1; tmp += s2; return tmp; } inline uint TQCString::length() const { return tqstrlen( data() ); } inline bool TQCString::truncate( uint pos ) { return tqresize(pos+1); } QT_END_NAMESPACE QT_END_HEADER #else // USE_QT4 class TQRegExp; class TQ_EXPORT TQCString : public TQByteArray // C string class { public: TQCString() {} // make null string TQCString( int size ); // allocate size incl. \0 TQCString( const TQCString &s ) : TQByteArray( s ) {} TQCString( const QByteArray ba ) : TQByteArray( ba ) {} TQCString( const char *str ); // deep copy TQCString( const char *str, uint maxlen ); // deep copy, max length ~TQCString(); TQCString &operator=( const TQCString &s );// shallow copy TQCString &operator=( const char *str ); // deep copy TQCString &operator=(const QByteArray &ba); bool isNull() const; bool isEmpty() const; uint length() const; bool resize( uint newlen ) { return tqresize(newlen); } bool tqresize( uint newlen ); bool truncate( uint pos ); bool fill( char c, int len = -1 ); TQCString copy() const; TQCString &sprintf( const char *format, ... ); int tqfind( char c, int index=0, bool cs=TRUE ) const; int tqfind( const char *str, int index=0, bool cs=TRUE ) const; #ifndef TQT_NO_REGEXP int tqfind( const TQRegExp &, int index=0 ) const; #endif int tqfindRev( char c, int index=-1, bool cs=TRUE) const; int tqfindRev( const char *str, int index=-1, bool cs=TRUE) const; #ifndef TQT_NO_REGEXP_CAPTURE int tqfindRev( const TQRegExp &, int index=-1 ) const; #endif int tqcontains( char c, bool cs=TRUE ) const; int tqcontains( const char *str, bool cs=TRUE ) const; #ifndef TQT_NO_REGEXP int tqcontains( const TQRegExp & ) const; #endif TQCString left( uint len ) const; TQCString right( uint len ) const; TQCString mid( uint index, uint len=0xffffffff) const; TQCString leftJustify( uint width, char fill=' ', bool trunc=FALSE)const; TQCString rightJustify( uint width, char fill=' ',bool trunc=FALSE)const; TQCString lower() const; TQCString upper() const; TQCString stripWhiteSpace() const; TQCString simplifyWhiteSpace() const; TQCString &insert( uint index, const char * ); TQCString &insert( uint index, char ); TQCString &append( const char * ); TQCString &prepend( const char * ); TQCString &remove( uint index, uint len ); TQCString &tqreplace( uint index, uint len, const char * ); #ifndef TQT_NO_REGEXP TQCString &tqreplace( const TQRegExp &, const char * ); #endif TQCString &tqreplace( char c, const char *after ); TQCString &tqreplace( const char *, const char * ); TQCString &tqreplace( char, char ); short toShort( bool *ok=0 ) const; ushort toUShort( bool *ok=0 ) const; int toInt( bool *ok=0 ) const; uint toUInt( bool *ok=0 ) const; long toLong( bool *ok=0 ) const; ulong toULong( bool *ok=0 ) const; float toFloat( bool *ok=0 ) const; double toDouble( bool *ok=0 ) const; TQCString &setStr( const char *s ); TQCString &setNum( short ); TQCString &setNum( ushort ); TQCString &setNum( int ); TQCString &setNum( uint ); TQCString &setNum( long ); TQCString &setNum( ulong ); TQCString &setNum( float, char f='g', int prec=6 ); TQCString &setNum( double, char f='g', int prec=6 ); inline const char * tqstringFromPos( int index ) { return constData() + index; } bool setExpand( uint index, char c ); operator const char *() const; TQCString &operator+=( const char *str ); TQCString &operator+=( char c ); TQCString &operator+=( const QString qs ); TQCString &operator+=( const QByteArray qba ); TQCString &operator+=( const TQCString tqcs ); private: int tqfind( const char *str, int index, bool cs, uint l ) const; }; /***************************************************************************** TQCString stream functions *****************************************************************************/ #ifndef TQT_NO_DATASTREAM TQ_EXPORT TQDataStream &operator<<( TQDataStream &, const TQCString & ); TQ_EXPORT TQDataStream &operator>>( TQDataStream &, TQCString & ); #endif /***************************************************************************** TQCString inline functions *****************************************************************************/ inline TQCString &TQCString::operator=( const TQCString &s ) { return (TQCString&)assign( s ); } inline TQCString &TQCString::operator=( const char *str ) { return (TQCString&)duplicate( str, tqstrlen(str)+1 ); } inline bool TQCString::isNull() const { return data() == 0; } inline bool TQCString::isEmpty() const { return data() == 0 || *data() == '\0'; } inline uint TQCString::length() const { return tqstrlen( data() ); } inline bool TQCString::truncate( uint pos ) { return resize(pos+1); } inline TQCString TQCString::copy() const { return TQCString( data() ); } inline TQCString &TQCString::prepend( const char *s ) { return insert(0,s); } inline TQCString &TQCString::append( const char *s ) { return operator+=(s); } inline TQCString &TQCString::setNum( short n ) { return setNum((long)n); } inline TQCString &TQCString::setNum( ushort n ) { return setNum((ulong)n); } inline TQCString &TQCString::setNum( int n ) { return setNum((long)n); } inline TQCString &TQCString::setNum( uint n ) { return setNum((ulong)n); } inline TQCString &TQCString::setNum( float n, char f, int prec ) { return setNum((double)n,f,prec); } inline TQCString::operator const char *() const { return (const char *)data(); } /***************************************************************************** TQCString non-member operators *****************************************************************************/ TQ_EXPORT inline bool operator==( const TQCString &s1, const TQCString &s2 ) { return tqstrcmp( s1.data(), s2.data() ) == 0; } TQ_EXPORT inline bool operator==( const TQCString &s1, const char *s2 ) { return tqstrcmp( s1.data(), s2 ) == 0; } TQ_EXPORT inline bool operator==( const char *s1, const TQCString &s2 ) { return tqstrcmp( s1, s2.data() ) == 0; } TQ_EXPORT inline bool operator!=( const TQCString &s1, const TQCString &s2 ) { return tqstrcmp( s1.data(), s2.data() ) != 0; } TQ_EXPORT inline bool operator!=( const TQCString &s1, const char *s2 ) { return tqstrcmp( s1.data(), s2 ) != 0; } TQ_EXPORT inline bool operator!=( const char *s1, const TQCString &s2 ) { return tqstrcmp( s1, s2.data() ) != 0; } TQ_EXPORT inline bool operator<( const TQCString &s1, const TQCString& s2 ) { return tqstrcmp( s1.data(), s2.data() ) < 0; } TQ_EXPORT inline bool operator<( const TQCString &s1, const char *s2 ) { return tqstrcmp( s1.data(), s2 ) < 0; } TQ_EXPORT inline bool operator<( const char *s1, const TQCString &s2 ) { return tqstrcmp( s1, s2.data() ) < 0; } TQ_EXPORT inline bool operator<=( const TQCString &s1, const TQCString &s2 ) { return tqstrcmp( s1.data(), s2.data() ) <= 0; } TQ_EXPORT inline bool operator<=( const TQCString &s1, const char *s2 ) { return tqstrcmp( s1.data(), s2 ) <= 0; } TQ_EXPORT inline bool operator<=( const char *s1, const TQCString &s2 ) { return tqstrcmp( s1, s2.data() ) <= 0; } TQ_EXPORT inline bool operator>( const TQCString &s1, const TQCString &s2 ) { return tqstrcmp( s1.data(), s2.data() ) > 0; } TQ_EXPORT inline bool operator>( const TQCString &s1, const char *s2 ) { return tqstrcmp( s1.data(), s2 ) > 0; } TQ_EXPORT inline bool operator>( const char *s1, const TQCString &s2 ) { return tqstrcmp( s1, s2.data() ) > 0; } TQ_EXPORT inline bool operator>=( const TQCString &s1, const TQCString& s2 ) { return tqstrcmp( s1.data(), s2.data() ) >= 0; } TQ_EXPORT inline bool operator>=( const TQCString &s1, const char *s2 ) { return tqstrcmp( s1.data(), s2 ) >= 0; } TQ_EXPORT inline bool operator>=( const char *s1, const TQCString &s2 ) { return tqstrcmp( s1, s2.data() ) >= 0; } TQ_EXPORT inline const TQCString operator+( const TQCString &s1, const TQCString &s2 ) { TQCString tmp( s1.data() ); tmp += static_cast(s2); return tmp; } TQ_EXPORT inline const TQCString operator+( const TQCString &s1, const char *s2 ) { TQCString tmp( s1.data() ); tmp += s2; return tmp; } TQ_EXPORT inline const TQCString operator+( const char *s1, const TQCString &s2 ) { TQCString tmp( s1 ); tmp += static_cast(s2); return tmp; } TQ_EXPORT inline const TQCString operator+( const TQCString &s1, char c2 ) { TQCString tmp( s1.data() ); tmp += c2; return tmp; } TQ_EXPORT inline const TQCString operator+( char c1, const TQCString &s2 ) { TQCString tmp; tmp += c1; tmp += static_cast(s2); return tmp; } #include "tqwinexport.h" #endif // USE_QT4 #endif // TQCSTRING_H