summaryrefslogtreecommitdiffstats
path: root/tqtinterface/qt4/src/tools/tqcstring.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'tqtinterface/qt4/src/tools/tqcstring.cpp')
-rw-r--r--tqtinterface/qt4/src/tools/tqcstring.cpp4149
1 files changed, 0 insertions, 4149 deletions
diff --git a/tqtinterface/qt4/src/tools/tqcstring.cpp b/tqtinterface/qt4/src/tools/tqcstring.cpp
deleted file mode 100644
index be41ebf..0000000
--- a/tqtinterface/qt4/src/tools/tqcstring.cpp
+++ /dev/null
@@ -1,4149 +0,0 @@
-/****************************************************************************
-**
-** Implementation of extended char array operations, and TQByteArray and
-** TQCString classes
-**
-** Created : 920722
-**
-** 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.
-**
-**********************************************************************/
-
-#include "tqstring.h"
-#include "tqregexp.h"
-#include "tqdatastream.h"
-
-#ifdef TQT_THREAD_SUPPORT
-# include <private/tqmutexpool_p.h>
-#endif // TQT_THREAD_SUPPORT
-
-#include <stdio.h>
-#include <stdarg.h>
-#include <stdlib.h>
-#include <ctype.h>
-#include <limits.h>
-#ifndef TQT_NO_COMPRESS
-#include "../3rdparty/zlib/zlib.h"
-#endif
-
-/*****************************************************************************
- Safe and portable C string functions; extensions to standard string.h
- *****************************************************************************/
-
-/*!
- \relates TQCString
-
- This function is normally part of the C library. TQt implements
- memmove() for platforms that do not provide it.
-
- memmove() copies \a len bytes from \a src into \a dst. The data
- is copied correctly even if \a src and \a dst overlap.
-*/
-
-void *tqmemmove( void *dst, const void *src, uint len )
-{
- register char *d;
- register char *s;
- if ( dst > src ) {
- d = (char *)dst + len - 1;
- s = (char *)src + len - 1;
- while ( len-- )
- *d-- = *s--;
- } else if ( dst < src ) {
- d = (char *)dst;
- s = (char *)src;
- while ( len-- )
- *d++ = *s++;
- }
- return dst;
-}
-
-
-/*!
- \relates TQCString
-
- Returns a duplicate string.
-
- Allocates space for a copy of \a src, copies it, and returns a
- pointer to the copy. If \a src is 0, it immediately returns 0.
-
- The returned string must be deleted using \c delete[].
-*/
-
-char *tqstrdup( const char *src )
-{
- if ( !src )
- return 0;
- char *dst = new char[strlen(src)+1];
- TQ_CHECK_PTR( dst );
- return strcpy( dst, src );
-}
-
-/*!
- \fn char *qstrcpy( char *dst, const char *src )
-
- \relates TQCString
-
- A safe strcpy() function.
-
- Copies all characters up to and including the '\0' from \a src
- into \a dst and returns a pointer to \a dst.
-*/
-
-/*!
- \relates TQCString
-
- A safe strncpy() function.
-
- Copies at most \a len bytes from \a src (stopping at \a len or the
- terminating '\0' whichever comes first) into \a dst and returns a
- pointer to \a dst. Guarantees that \a dst is '\0'-terminated. If
- \a src or \a dst is 0, returns 0 immediately.
-
- \sa qstrcpy()
-*/
-
-char *tqstrncpy( char *dst, const char *src, uint len )
-{
- if ( !src || !dst )
- return 0;
- strncpy( dst, src, len );
- if ( len > 0 )
- dst[len-1] = '\0';
- return dst;
-}
-
-/*!
- \fn uint tqstrlen( const char *str );
-
- \relates TQCString
-
- A safe strlen function.
-
- Returns the number of characters that precede the terminating '\0'.
- or 0 if \a str is 0.
-*/
-
-/*!
- \fn int qstrcmp( const char *str1, const char *str2 );
-
- \relates TQCString
-
- A safe strcmp() function.
-
- Compares \a str1 and \a str2. Returns a negative value if \a str1
- is less than \a str2, 0 if \a str1 is equal to \a str2 or a
- positive value if \a str1 is greater than \a str2.
-
- Special case I: Returns 0 if \a str1 and \a str2 are both 0.
-
- Special case II: Returns a random nonzero value if \a str1 is 0
- or \a str2 is 0 (but not both).
-
- \sa tqstrncmp() qstricmp() qstrnicmp()
- \link #asciinotion Note on character comparisons \endlink
-*/
-
-/*!
- \fn int tqstrncmp( const char *str1, const char *str2, uint len );
-
- \relates TQCString
-
- A safe strncmp() function.
-
- Compares at most \a len bytes of \a str1 and \a str2.
-
- Returns a negative value if \a str1 is less than \a str2, 0 if \a
- str1 is equal to \a str2 or a positive value if \a str1 is greater
- than \a str2.
-
- Special case I: Returns 0 if \a str1 and \a str2 are both 0.
-
- Special case II: Returns a random nonzero value if \a str1 is 0
- or \a str2 is 0 (but not both).
-
- \sa qstrcmp(), qstricmp(), qstrnicmp()
- \link #asciinotion Note on character comparisons \endlink
-*/
-
-/*!
- \relates TQCString
-
- A safe stricmp() function.
-
- Compares \a str1 and \a str2 ignoring the case.
-
- Returns a negative value if \a str1 is less than \a str2, 0 if \a
- str1 is equal to \a str2 or a positive value if \a str1 is greater
- than \a str2.
-
- Special case I: Returns 0 if \a str1 and \a str2 are both 0.
-
- Special case II: Returns a random nonzero value if \a str1 is 0
- or \a str2 is 0 (but not both).
-
- \sa qstrcmp(), tqstrncmp(), qstrnicmp()
- \link #asciinotion Note on character comparisons \endlink
-*/
-
-int tqstricmp( const char *str1, const char *str2 )
-{
- register const uchar *s1 = (const uchar *)str1;
- register const uchar *s2 = (const uchar *)str2;
- int res;
- uchar c;
- if ( !s1 || !s2 )
- return s1 ? 1 : ( s2 ? -1 : 0 );
- for ( ; !(res = (c=tolower(*s1)) - tolower(*s2)); s1++, s2++ )
- if ( !c ) // strings are equal
- break;
- return res;
-}
-
-/*!
- \relates TQCString
-
- A safe strnicmp() function.
-
- Compares at most \a len bytes of \a str1 and \a str2 ignoring the case.
-
- Returns a negative value if \a str1 is less than \a str2, 0 if \a str1
- is equal to \a str2 or a positive value if \a str1 is greater than \a
- str2.
-
- Special case I: Returns 0 if \a str1 and \a str2 are both 0.
-
- Special case II: Returns a random nonzero value if \a str1 is 0
- or \a str2 is 0 (but not both).
-
- \sa qstrcmp(), tqstrncmp() qstricmp()
- \link #asciinotion Note on character comparisons \endlink
-*/
-
-int tqstrnicmp( const char *str1, const char *str2, uint len )
-{
- register const uchar *s1 = (const uchar *)str1;
- register const uchar *s2 = (const uchar *)str2;
- int res;
- uchar c;
- if ( !s1 || !s2 )
- return s1 ? 1 : ( s2 ? -1 : 0 );
- for ( ; len--; s1++, s2++ ) {
- if ( (res = (c=tolower(*s1)) - tolower(*s2)) )
- return res;
- if ( !c ) // strings are equal
- break;
- }
- return 0;
-}
-
-
-static TQ_UINT16 crc_tbl[16];
-static bool crc_tbl_init = FALSE;
-
-static void createCRC16Table() // build CRC16 lookup table
-{
- register uint i;
- register uint j;
- uint v0, v1, v2, v3;
- for ( i = 0; i < 16; i++ ) {
- v0 = i & 1;
- v1 = ( i >> 1 ) & 1;
- v2 = ( i >> 2 ) & 1;
- v3 = ( i >> 3 ) & 1;
- j = 0;
-#undef SET_BIT
-#define SET_BIT(x, b, v) (x) |= (v) << (b)
- SET_BIT( j, 0, v0 );
- SET_BIT( j, 7, v0 );
- SET_BIT( j, 12, v0 );
- SET_BIT( j, 1, v1 );
- SET_BIT( j, 8, v1 );
- SET_BIT( j, 13, v1 );
- SET_BIT( j, 2, v2 );
- SET_BIT( j, 9, v2 );
- SET_BIT( j, 14, v2 );
- SET_BIT( j, 3, v3 );
- SET_BIT( j, 10, v3 );
- SET_BIT( j, 15, v3 );
- crc_tbl[i] = j;
- }
-}
-
-/*!
- \relates TQMemArray
-
- Returns the CRC-16 checksum of \a len bytes starting at \a data.
-
- The checksum is independent of the byte order (endianness).
-*/
-
-TQ_UINT16 qChecksum( const char *data, uint len )
-{
- if ( !crc_tbl_init ) { // create lookup table
-
-#ifdef TQT_THREAD_SUPPORT
- TQMutexLocker locker( tqt_global_mutexpool ?
- tqt_global_mutexpool->get( &crc_tbl_init ) : 0 );
-#endif // TQT_THREAD_SUPPORT
-
- if ( !crc_tbl_init ) {
- createCRC16Table();
- crc_tbl_init = TRUE;
- }
- }
- register TQ_UINT16 crc = 0xffff;
- uchar c;
- uchar *p = (uchar *)data;
- while ( len-- ) {
- c = *p++;
- crc = ( (crc >> 4) & 0x0fff ) ^ crc_tbl[((crc ^ c) & 15)];
- c >>= 4;
- crc = ( (crc >> 4) & 0x0fff ) ^ crc_tbl[((crc ^ c) & 15)];
- }
- return ~crc & 0xffff;
-}
-
-/*!
- \fn TQByteArray tqCompress( const TQByteArray& data )
-
- \relates TQByteArray
-
- Compresses the array \a data and returns the compressed byte
- array using zlib.
-
- \sa tqUncompress()
-*/
-
-/*!
- \relates TQByteArray
-
- \overload
-
- Compresses the array \a data which is \a nbytes long and returns the
- compressed byte array.
-*/
-
-#ifndef TQT_NO_COMPRESS
-TQByteArray tqCompress( const uchar* data, int nbytes )
-{
- if ( nbytes == 0 ) {
- TQByteArray tmp( 4 );
- tmp.fill( 0 );
- return tmp;
- }
- if ( !data ) {
-#if defined(TQT_CHECK_RANGE)
- qWarning( "tqCompress: data is NULL." );
-#endif
- return TQByteArray();
- }
-
- ulong len = nbytes + nbytes / 100 + 13;
- TQByteArray bazip;
- int res;
- do {
- bazip.resize( len + 4 );
- res = ::compress( (uchar*)bazip.data()+4, &len, (uchar*)data, nbytes );
-
- switch ( res ) {
- case Z_OK:
- bazip.resize( len + 4 );
- bazip[0] = ( nbytes & 0xff000000 ) >> 24;
- bazip[1] = ( nbytes & 0x00ff0000 ) >> 16;
- bazip[2] = ( nbytes & 0x0000ff00 ) >> 8;
- bazip[3] = ( nbytes & 0x000000ff );
- break;
- case Z_MEM_ERROR:
-#if defined(TQT_CHECK_RANGE)
- qWarning( "tqCompress: Z_MEM_ERROR: Not enough memory." );
-#endif
- bazip.resize( 0 );
- break;
- case Z_BUF_ERROR:
- len *= 2;
- break;
- }
- } while ( res == Z_BUF_ERROR );
-
- return bazip;
-}
-#endif
-
-/*!
- \fn TQByteArray tqUncompress( const TQByteArray& data )
-
- \relates TQByteArray
-
- Uncompresses the array \a data and returns the uncompressed byte
- array.
-
- Returns an empty TQByteArray if the input data was corrupt.
- \omit
- ADD THE FOLLOWING FOR TQt 4.0
- This function will uncompress data compressed with tqCompress()
- from this and any earlier TQt version, back to TQt 3.1 when this
- feature was added.
- \endomit
-
- \sa tqCompress()
-*/
-
-/*!
- \relates TQByteArray
-
- \overload
-
- Uncompresses the array \a data which is \a nbytes long and returns
- the uncompressed byte array.
-*/
-
-#ifndef TQT_NO_COMPRESS
-TQByteArray tqUncompress( const uchar* data, int nbytes )
-{
- if ( !data ) {
-#if defined(TQT_CHECK_RANGE)
- qWarning( "tqUncompress: data is NULL." );
-#endif
- return TQByteArray();
- }
- if ( nbytes <= 4 ) {
-#if defined(TQT_CHECK_RANGE)
- if ( nbytes < 4 || ( data[0]!=0 || data[1]!=0 || data[2]!=0 || data[3]!=0 ) )
- qWarning( "tqUncompress: Input data is corrupted." );
-#endif
- return TQByteArray();
- }
- ulong expectedSize = ( data[0] << 24 ) | ( data[1] << 16 ) | ( data[2] << 8 ) | data[3];
- ulong len = TQMAX( expectedSize, 1 );
- TQByteArray baunzip;
- int res;
- do {
- if ( baunzip.tqresize( len ) ) {
- res = ::uncompress( (uchar*)baunzip.data(), &len,
- (uchar*)data+4, nbytes-4 );
- } else {
- res = Z_MEM_ERROR;
- }
-
- switch ( res ) {
- case Z_OK:
- if ( len != baunzip.size() )
- baunzip.resize( len );
- break;
- case Z_MEM_ERROR:
-#if defined(TQT_CHECK_RANGE)
- qWarning( "tqUncompress: Z_MEM_ERROR: Not enough memory." );
-#endif
- break;
- case Z_BUF_ERROR:
- len *= 2;
- break;
- case Z_DATA_ERROR:
-#if defined(TQT_CHECK_RANGE)
- qWarning( "tqUncompress: Z_DATA_ERROR: Input data is corrupted." );
-#endif
- break;
- }
- } while ( res == Z_BUF_ERROR );
-
- if ( res != Z_OK )
- baunzip = TQByteArray();
-
- return baunzip;
-}
-#endif
-
-/*****************************************************************************
- TQByteArray documentation
- *****************************************************************************/
-
-/*!
- \class TQByteArray
- \reentrant
- \brief The TQByteArray class provides an array of bytes.
-
- \ingroup collection
- \ingroup tools
-
- The TQByteArray class provides an explicitly shared array of bytes.
- It is useful for manipulating memory areas with custom data.
- TQByteArray is implemented as a TQMemArray\<char\>. See the \l
- TQMemArray documentation for further information.
-*/
-
-/*!
- \fn TQByteArray::TQByteArray()
-
- Constructs an empty TQByteArray.
-*/
-
-/*!
- \fn TQByteArray::TQByteArray( int size )
-
- Constructs a TQByteArray of size \a size.
-*/
-
-// /*****************************************************************************
-// TQByteArray stream functions
-// *****************************************************************************/
-//
-// /*!
-// \relates TQMemArray
-//
-// Writes byte array \a a to the stream \a s and returns a reference
-// to the stream.
-//
-// \sa \link datastreamformat.html Format of the TQDataStream operators \endlink
-// */
-// #ifndef TQT_NO_DATASTREAM
-//
-// TQDataStream &operator<<( TQDataStream &s, const TQByteArray &a )
-// {
-// return s.writeBytes( a.data(), a.size() );
-// }
-//
-// /*!
-// \relates TQMemArray
-//
-// Reads a byte array into \a a from the stream \a s and returns a
-// reference to the stream.
-//
-// \sa \link datastreamformat.html Format of the TQDataStream operators \endlink
-// */
-//
-// TQDataStream &operator>>( TQDataStream &s, TQByteArray &a )
-// {
-// TQ_UINT32 len;
-// s >> len; // read size of array
-// if ( len == 0 || s.eof() ) { // end of file reached
-// a.resize( 0 );
-// return s;
-// }
-// if ( !a.resize( (uint)len ) ) { // resize array
-// #if defined(TQT_CHECK_NULL)
-// qWarning( "TQDataStream: Not enough memory to read TQByteArray" );
-// #endif
-// len = 0;
-// }
-// if ( len > 0 ) // not null array
-// s.readRawBytes( a.data(), (uint)len );
-// return s;
-// }
-//
-// #endif //TQT_NO_DATASTREAM
-
-#ifdef USE_QT4
-
-/*****************************************************************************
- TQByteArray stream functions
- *****************************************************************************/
-#ifndef TQT_NO_DATASTREAM
-TQDataStream &operator<<( TQDataStream &d, const TQByteArray &s ) {
- if (d.version() >= QDataStream::Qt_4_0) {
- QDataStream &qds = operator<<(static_cast<QDataStream &>(d), static_cast<const QByteArray &>(s));
- TQDataStream &tqds = *static_cast<TQDataStream*>(&qds);
- return tqds;
- }
-
- // we need to add a NUL to keep compatibility with Qt 3's QByteArray
- QByteArray copy = s;
- copy.append('\0');
-
- QDataStream &qds = operator<<(static_cast<QDataStream &>(d), static_cast<const QByteArray &>(s));
- TQDataStream &tqds = *static_cast<TQDataStream*>(&qds);
- return tqds;
-}
-
-TQDataStream &operator>>( TQDataStream &d, TQByteArray &s ) {
- operator>>(d, static_cast<QByteArray &>(s));
- if (d.version() < QDataStream::Qt_4_0 && s.endsWith('\0'))
- s.chop(1); // ending NUL
- return d;
-}
-#endif // TQT_NO_DATASTREAM
-
-#endif // USE_QT4
-
-#ifdef USE_QT4
-
-/*!
- \reimp
-*/
-
-TQByteArray::~TQByteArray()
-{
-}
-
-#endif // USE_QT4
-
-/*****************************************************************************
- TQCString member functions
- *****************************************************************************/
-
-// #ifdef USE_QT4
-#if 0
-
-QT_BEGIN_NAMESPACE
-
-/*!
- Constructs a string with room for \a size characters, including
- the '\0'-terminator. Makes a null string if \a size == 0.
-
- If \a size \> 0, then the first and last characters in the string
- are initialized to '\0'. All other characters are uninitialized.
-
- \sa resize(), isNull()
-*/
-
-// TQCString::TQCString( int size )
-// : TQByteArray( size )
-// {
-// if ( size > 0 ) {
-// *data() = '\0'; // set terminator
-// *(data()+(size-1)) = '\0';
-// }
-// }
-
-TQCString::TQCString( int size )
- : TQByteArray(size, '\0')
-{
-}
-
-/*!
- Constructs a string that is a deep copy of \a str.
-
- If \a str is 0 a null string is created.
-
- \sa isNull()
-*/
-
-TQCString::TQCString( const char *str )
-{
- duplicate( str, tqstrlen(str) + 1 );
-}
-
-
-/*!
- Constructs a string that is a deep copy of \a str. The copy will
- be at most \a maxsize bytes long including the '\0'-terminator.
-
- Example:
- \code
- TQCString str( "helloworld", 6 ); // assigns "hello" to str
- \endcode
-
- If \a str contains a 0 byte within the first \a maxsize bytes, the
- resulting TQCString will be terminated by this 0. If \a str is 0 a
- null string is created.
-
- \sa isNull()
-*/
-
-TQCString::TQCString( const char *str, uint maxsize )
-{
- if ( str == 0 )
- return;
- uint len; // index of first '\0'
- for ( len = 0; len < maxsize - 1; len++ ) {
- if ( str[len] == '\0' )
- break;
- }
- TQByteArray::tqresize( len + 1 );
- memcpy( data(), str, len );
- data()[len] = 0;
-}
-
-// TQCString(int size) : TQByteArray(size, '\0') {}
-// TQCString(const char *str) : TQByteArray(str) {}
-// TQCString(const char *str, uint maxlen) : TQByteArray(str, qMin(tqstrlen(str), maxlen - 1)) {}
-// // TQCString(const char *str, uint maxlen) : TQByteArray(str, TQMIN(tqstrlen(str)+1, maxlen)) {} // This would seem to be more correct at first glance, however it completely breaks tdeconfig_compiler. As to why, I don't know!!! [FIXME]
-
-TQCString &TQCString::operator=(const TQCString &s) {
- TQByteArray::operator=(s);
- return *this;
-}
-
-TQCString &TQCString::operator=(const char *str) {
-// TQByteArray::operator=(str); return *this;
- TQByteArray::operator=(duplicate( str, tqstrlen(str)+1 ));
- return *this;
-}
-
-TQCString &TQCString::operator=(const QByteArray &ba) {
- TQByteArray::operator=(ba);
- return *this;
-}
-
-/*****************************************************************************
- TQCString member functions
- *****************************************************************************/
-
-/*!
- \class TQCString
- \reentrant
- \brief The TQCString class provides an abstraction of the classic C
- zero-terminated char array (char *).
-
- \compat
-
- TQCString tries to behave like a more convenient \c{const char *}.
- The price of doing this is that some algorithms will perform
- badly. For example, append() is O(length()) since it scans for a
- null terminator. Although you might use TQCString for text that is
- never exposed to the user, for most purposes, and especially for
- user-visible text, you should use QString. QString provides
- implicit sharing, Unicode and other internationalization support,
- and is well optimized.
-
- Note that for the TQCString methods that take a \c{const char *}
- parameter the \c{const char *} must either be 0 (null) or not-null
- and '\0' (NUL byte) terminated; otherwise the results are
- undefined.
-
- A default constructed TQCString is \e null, i.e. both the length
- and the data pointer are 0 and isNull() returns true.
-
- \note However, if you ask for the data pointer of a null TQCString
- by calling data(), then because the internal representation of the
- null TQCString is shared, it will be detached and replaced with a
- non-shared, empty representation, a non-null data pointer will be
- returned, and subsequent calls to isNull() will return false. But
- if you ask for the data pointer of a null TQCString by calling
- constData(), the shared internal representation is not detached, a
- null data pointer is returned, and subsequent calls to isNull()
- will continue to return true.
-
- A TQCString that references the empty string ("", a single '\0'
- char) is \e empty, i.e. isEmpty() returns true. Both null and
- empty TQCStrings are legal parameters to the methods. Assigning
- \c{const char *} 0 to TQCString produces a null TQCString.
-
- The length() function returns the length of the string; resize()
- resizes the string and truncate() truncates the string. A string
- can be filled with a character using fill(). Strings can be left
- or right padded with characters using leftJustify() and
- rightJustify(). Characters, strings and regular expressions can be
- searched for using find() and findRev(), and counted using
- contains().
-
- Strings and characters can be inserted with insert() and appended
- with append(). A string can be prepended with prepend().
- Characters can be removed from the string with remove() and
- replaced with replace().
-
- Portions of a string can be extracted using left(), right() and
- mid(). Whitespace can be removed using stripWhiteSpace() and
- simplifyWhiteSpace(). Strings can be converted to uppercase or
- lowercase with upper() and lower() respectively.
-
- Strings that contain numbers can be converted to numbers with
- toShort(), toInt(), toLong(), toULong(), toFloat() and toDouble().
- Numbers can be converted to strings with setNum().
-
- Many operators are overloaded to work with TQCStrings. TQCString
- also supports some more obscure functions, e.g. sprintf(),
- setStr() and setExpand().
-
- \sidebar Note on Character Comparisons
-
- In TQCString the notion of uppercase and lowercase and of which
- character is greater than or less than another character is locale
- dependent. This affects functions which support a case insensitive
- option or which compare or lowercase or uppercase their arguments.
- Case insensitive operations and comparisons will be accurate if
- both strings contain only ASCII characters. (If \c $LC_CTYPE is
- set, most Unix systems do "the right thing".) Functions that this
- affects include contains(), find(), findRev(), \l operator<(), \l
- operator<=(), \l operator>(), \l operator>=(), lower() and
- upper().
-
- This issue does not apply to \l{QString}s since they represent
- characters using Unicode.
- \endsidebar
-
- Performance note: The TQCString methods for QRegExp searching are
- implemented by converting the TQCString to a QString and performing
- the search on that. This implies a deep copy of the TQCString data.
- If you are going to perform many QRegExp searches on a large
- TQCString, you will get better performance by converting the
- TQCString to a QString yourself, and then searching in the QString.
-*/
-
-/*!
- \fn TQCString TQCString::left(uint len) const
-
- \internal
-*/
-
-/*!
- \fn TQCString TQCString::right(uint len) const
-
- \internal
-*/
-
-/*!
- \fn TQCString TQCString::mid(uint index, uint len) const
-
- \internal
-*/
-
-/*!
- \fn TQCString TQCString::lower() const
-
- Use QByteArray::toLower() instead.
-*/
-
-/*!
- \fn TQCString TQCString::upper() const
-
- Use QByteArray::toUpper() instead.
-*/
-
-/*!
- \fn TQCString TQCString::stripWhiteSpace() const
-
- Use QByteArray::trimmed() instead.
-*/
-
-/*!
- \fn TQCString TQCString::simplifyWhiteSpace() const
-
- Use QByteArray::simplified() instead.
-*/
-
-/*!
- \fn TQCString& TQCString::insert(uint index, const char *c)
-
- \internal
-*/
-
-/*!
- \fn TQCString& TQCString::insert(uint index, char c)
-
- \internal
-*/
-
-/*!
- \fn TQCString& TQCString::prepend(const char *c)
-
- \internal
-*/
-
-/*!
- \fn TQCString& TQCString::remove(uint index, uint len)
-
- \internal
-*/
-
-/*!
- \fn TQCString& TQCString::replace(uint index, uint len, const char *c)
-
- \internal
-*/
-
-/*!
- \fn TQCString& TQCString::replace(char c, const TQCString &after)
-
- \internal
-*/
-
-/*!
- \fn TQCString& TQCString::replace(char c, const char *after)
-
- \internal
-*/
-
-/*!
- \fn TQCString& TQCString::replace(const TQCString &b, const TQCString &a)
-
- \internal
-*/
-
-/*!
- \fn TQCString& TQCString::replace(const char *b, const char *a)
-
- \internal
-*/
-
-/*!
- \fn TQCString& TQCString::replace(char b, char a)
-
- \internal
-*/
-
-/*!
- \fn TQCString::TQCString()
-
- Constructs a null string.
-
- \sa isNull()
-*/
-
-/*!
- \fn TQCString::TQCString(const QByteArray &ba)
-
- Constructs a copy of \a ba.
-*/
-
-/*!
- \fn TQCString::TQCString(const TQCString &s)
-
- Constructs a shallow copy \a s.
-*/
-
-/*! \fn TQCString::TQCString(int size)
- Constructs a string with room for \a size characters, including
- the '\0'-terminator. Makes a null string if \a size == 0.
-
- If \a size \> 0, then the first and last characters in the string
- are initialized to '\0'. All other characters are uninitialized.
-
- \sa resize(), isNull()
-*/
-
-/*! \fn TQCString::TQCString(const char *str)
- Constructs a string that is a deep copy of \a str.
-
- If \a str is 0 a null string is created.
-
- \sa isNull()
-*/
-
-
-/*! \fn TQCString::TQCString(const char *str, uint maxsize)
-
- Constructs a string that is a deep copy of \a str. The copy will
- be at most \a maxsize bytes long including the '\0'-terminator.
-
- Example:
- \snippet doc/src/snippets/code/src_qt3support_tools_q3cstring.cpp 0
-
- If \a str contains a 0 byte within the first \a maxsize bytes, the
- resulting TQCString will be terminated by this 0. If \a str is 0 a
- null string is created.
-
- \sa isNull()
-*/
-
-/*!
- \fn TQCString &TQCString::operator=(const QByteArray &ba)
-
- Assigns byte array \a ba to this TQCString.
-*/
-
-/*!
- \fn TQCString &TQCString::operator=(const TQCString &s)
-
- Assigns a shallow copy of \a s to this string and returns a
- reference to this string.
-*/
-
-/*!
- \fn TQCString &TQCString::operator=(const char *str)
- \overload
-
- Assigns a deep copy of \a str to this string and returns a
- reference to this string.
-
- If \a str is 0 a null string is created.
-
- \sa isNull()
-*/
-
-/*
- \fn bool TQCString::isNull() const
-
- Returns true if the string is null, i.e. if data() == 0; otherwise
- returns false. A null string is also an empty string.
-
- \note If you ask for the data pointer of a null TQCString by
- calling data(), then because the internal representation of the
- null TQCString is shared, it will be detached and replaced with a
- non-shared, empty representation, a non-null data pointer will be
- returned, and subsequent calls to isNull() will return false. But
- if you ask for the data pointer of a null TQCString by calling
- constData(), the shared internal representation is not detached, a
- null data pointer is returned, and subsequent calls to isNull()
- will continue to return true.
-
- Example:
- \snippet doc/src/snippets/code/src.qt3support.tools.q3cstring.cpp 1
-
- \sa isEmpty(), length(), size()
-*/
-
-/*
- \fn bool TQCString::isEmpty() const
-
- Returns true if the string is empty, i.e. if length() == 0;
- otherwise returns false. An empty string is not always a null
- string.
-
- See example in isNull().
-
- \sa isNull(), length(), size()
-*/
-
-/*
- \fn uint TQCString::length() const
-
- Returns the length of the string, excluding the '\0'-terminator.
- Equivalent to calling \c strlen(data()).
-
- Null strings and empty strings have zero length.
-
- \sa size(), isNull(), isEmpty()
-*/
-
-/*
- \fn bool TQCString::truncate(uint pos)
-
- Truncates the string at position \a pos.
-
- Equivalent to calling \c resize(pos+1).
-
- Example:
- \snippet doc/src/snippets/code/src.qt3support.tools.q3cstring.cpp 2
-
- \sa resize()
-*/
-
-/*!
- \reimp
-*/
-
-TQCString::~TQCString()
-{
-}
-
-/*!
- Implemented as a call to the native vsprintf() (see the manual for
- your C library).
-
- If the string is shorter than 256 characters, this sprintf() calls
- resize(256) to decrease the chance of memory corruption. The
- string is resized back to its actual length before sprintf()
- returns.
-
- Example:
- \snippet doc/src/snippets/code/src_qt3support_tools_q3cstring.cpp 3
-
- \warning All vsprintf() implementations will write past the end of
- the target string (*this) if the \a format specification and
- arguments happen to be longer than the target string, and some
- will also fail if the target string is longer than some arbitrary
- implementation limit.
-
- Giving user-supplied arguments to sprintf() is risky: Sooner or
- later someone will paste a huge line into your application.
-*/
-
-TQCString &TQCString::sprintf(const char *format, ...)
-{
- detach();
- va_list ap;
- va_start(ap, format);
- if (size() < 256)
- resize(256); // make string big enough
- qvsnprintf(data(), size(), format, ap);
- resize(qstrlen(constData()));
- va_end(ap);
- return *this;
-}
-
-
-
-/*!
- \fn TQCString TQCString::copy() const
-
- Returns a deep copy of this string.
-*/
-
-
-/*!
- Returns a string of length \a width (plus one for the terminating
- '\0') that contains this string padded with the \a fill character.
-
- If the length of the string exceeds \a width and \a truncate is
- false (the default), then the returned string is a copy of the
- string. If the length of the string exceeds \a width and \a
- truncate is true, then the returned string is a left(\a width).
-
- Example:
- \snippet doc/src/snippets/code/src_qt3support_tools_q3cstring.cpp 4
-
- \sa rightJustify()
-*/
-
-TQCString TQCString::leftJustify(uint width, char fill, bool truncate) const
-{
- TQCString result;
- int len = qstrlen(constData());
- int padlen = width - len;
- if (padlen > 0) {
- result.resize(len+padlen);
- memcpy(result.data(), constData(), len);
- memset(result.data()+len, fill, padlen);
- } else {
- if (truncate)
- result = left(width);
- else
- result = *this;
- }
- return result;
-}
-
-/*!
- Returns a string of length \a width (plus one for the terminating
- '\0') that contains zero or more of the \a fill character followed
- by this string.
-
- If the length of the string exceeds \a width and \a truncate is
- false (the default), then the returned string is a copy of the
- string. If the length of the string exceeds \a width and \a
- truncate is true, then the returned string is a left(\a width).
-
- Example:
- \snippet doc/src/snippets/code/src_qt3support_tools_q3cstring.cpp 5
-
- \sa leftJustify()
-*/
-
-TQCString TQCString::rightJustify(uint width, char fill, bool truncate) const
-{
- TQCString result;
- int len = qstrlen(constData());
- int padlen = width - len;
- if (padlen > 0) {
- result.resize(len+padlen);
- memset(result.data(), fill, padlen);
- memcpy(result.data()+padlen, constData(), len);
- } else {
- if (truncate)
- result = left(width);
- else
- result = *this;
- }
- return result;
-}
-
-/*!
- Returns the string converted to a \c long value.
-
- If \a ok is not 0: *\a ok is set to false if the string is not a
- number, or if it has trailing garbage; otherwise *\a ok is set to
- true.
-*/
-
-long TQCString::toLong(bool *ok) const
-{
- const char *p = constData();
- long val=0;
- const long max_mult = 214748364;
- bool is_ok = false;
- int neg = 0;
- if (!p)
- goto bye;
- while (isspace((uchar) *p)) // skip leading space
- p++;
- if (*p == '-') {
- p++;
- neg = 1;
- } else if (*p == '+') {
- p++;
- }
- if (!isdigit((uchar) *p))
- goto bye;
- while (isdigit((uchar) *p)) {
- if (val > max_mult || (val == max_mult && (*p-'0') > 7+neg))
- goto bye;
- val = 10*val + (*p++ - '0');
- }
- if (neg)
- val = -val;
- while (isspace((uchar) *p)) // skip trailing space
- p++;
- if (*p == '\0')
- is_ok = true;
-bye:
- if (ok)
- *ok = is_ok;
- return is_ok ? val : 0;
-}
-
-/*!
- Returns the string converted to an \c{unsigned long} value.
-
- If \a ok is not 0: *\a ok is set to false if the string is not a
- number, or if it has trailing garbage; otherwise *\a ok is set to
- true.
-*/
-
-ulong TQCString::toULong(bool *ok) const
-{
- const char *p = constData();
- ulong val=0;
- const ulong max_mult = 429496729;
- bool is_ok = false;
- if (!p)
- goto bye;
- while (isspace((uchar) *p)) // skip leading space
- p++;
- if (*p == '+')
- p++;
- if (!isdigit((uchar) *p))
- goto bye;
- while (isdigit((uchar) *p)) {
- if (val > max_mult || (val == max_mult && (*p-'0') > 5))
- goto bye;
- val = 10*val + (*p++ - '0');
- }
- while (isspace((uchar) *p)) // skip trailing space
- p++;
- if (*p == '\0')
- is_ok = true;
-bye:
- if (ok)
- *ok = is_ok;
- return is_ok ? val : 0;
-}
-
-/*!
- Returns the string converted to a \c{short} value.
-
- If \a ok is not 0: *\a ok is set to false if the string is not a
- number, is out of range, or if it has trailing garbage; otherwise
- *\a ok is set to true.
-*/
-
-short TQCString::toShort(bool *ok) const
-{
- long v = toLong(ok);
- if (ok && *ok && (v < -32768 || v > 32767))
- *ok = false;
- return (short)v;
-}
-
-/*!
- Returns the string converted to an \c{unsigned short} value.
-
- If \a ok is not 0: *\a ok is set to false if the string is not a
- number, is out of range, or if it has trailing garbage; otherwise
- *\a ok is set to true.
-*/
-
-ushort TQCString::toUShort(bool *ok) const
-{
- ulong v = toULong(ok);
- if (ok && *ok && (v > 65535))
- *ok = false;
- return (ushort)v;
-}
-
-
-/*!
- Returns the string converted to a \c{int} value.
-
- If \a ok is not 0: *\a ok is set to false if the string is not a
- number, or if it has trailing garbage; otherwise *\a ok is set to
- true.
-*/
-
-int TQCString::toInt(bool *ok) const
-{
- return (int)toLong(ok);
-}
-
-/*!
- Returns the string converted to an \c{unsigned int} value.
-
- If \a ok is not 0: *\a ok is set to false if the string is not a
- number, or if it has trailing garbage; otherwise *\a ok is set to
- true.
-*/
-
-uint TQCString::toUInt(bool *ok) const
-{
- return (uint)toULong(ok);
-}
-
-/*!
- Returns the string converted to a \c{double} value.
-
- If \a ok is not 0: *\a ok is set to false if the string is not a
- number, or if it has trailing garbage; otherwise *\a ok is set to
- true.
-*/
-
-double TQCString::toDouble(bool *ok) const
-{
- char *end;
- double val = strtod(constData() ? constData() : "", &end);
- if (ok)
- *ok = (constData() && *constData() && (end == 0 || *end == '\0'));
- return val;
-}
-
-/*!
- Returns the string converted to a \c{float} value.
-
- If \a ok is not 0: *\a ok is set to false if the string is not a
- number, or if it has trailing garbage; otherwise *\a ok is set to
- true.
-*/
-
-float TQCString::toFloat(bool *ok) const
-{
- return (float)toDouble(ok);
-}
-
-
-/*! \fn TQCString &TQCString::setStr(const char *str)
- Makes a deep copy of \a str. Returns a reference to the string.
-*/
-
-/*!
- \overload
-
- Sets the string to the string representation of the number \a n
- and returns a reference to the string.
-*/
-
-TQCString &TQCString::setNum(long n)
-{
- data();
- char buf[20];
- register char *p = &buf[19];
- bool neg;
- if (n < 0) {
- neg = true;
- n = -n;
- } else {
- neg = false;
- }
- *p = '\0';
- do {
- *--p = ((int)(n%10)) + '0';
- n /= 10;
- } while (n);
- if (neg)
- *--p = '-';
- *this = p;
- return *this;
-}
-
-/*!
- \overload
-
- Sets the string to the string representation of the number \a n
- and returns a reference to the string.
-*/
-
-TQCString &TQCString::setNum(ulong n)
-{
- data();
- char buf[20];
- register char *p = &buf[19];
- *p = '\0';
- do {
- *--p = ((int)(n%10)) + '0';
- n /= 10;
- } while (n);
- *this = p;
- return *this;
-}
-
-/*!
- \fn TQCString &TQCString::setNum(int n)
- \overload
-
- Sets the string to the string representation of the number \a n
- and returns a reference to the string.
-*/
-
-/*!
- \fn TQCString &TQCString::setNum(uint n)
- \overload
-
- Sets the string to the string representation of the number \a n
- and returns a reference to the string.
-*/
-
-/*!
- \fn TQCString &TQCString::setNum(short n)
- \overload
-
- Sets the string to the string representation of the number \a n
- and returns a reference to the string.
-*/
-
-/*!
- \fn TQCString &TQCString::setNum(ushort n)
- \overload
-
- Sets the string to the string representation of the number \a n
- and returns a reference to the string.
-*/
-
-/*!
- Sets the string to the string representation of the number \a n
- and returns a reference to the string.
-
- The format of the string representation is specified by the format
- character \a f, and the precision (number of digits after the
- decimal point) is specified with \a prec.
-
- The valid formats for \a f are 'e', 'E', 'f', 'g' and 'G'. The
- formats are the same as for sprintf(); they are explained in \l
- QString::arg().
-*/
-
-TQCString &TQCString::setNum(double n, char f, int prec)
-{
-#ifndef QT_NO_DEBUG
- if (!(f=='f' || f=='F' || f=='e' || f=='E' || f=='g' || f=='G'))
- qWarning("TQCString::setNum: Invalid format char '%c'", f);
-#endif
- char format[20];
- register char *fs = format; // generate format string
- *fs++ = '%'; // "%.<prec>l<f>"
- if (prec > 99)
- prec = 99;
- *fs++ = '.';
- if (prec >= 10) {
- *fs++ = prec / 10 + '0';
- *fs++ = prec % 10 + '0';
- } else {
- *fs++ = prec + '0';
- }
- *fs++ = 'l';
- *fs++ = f;
- *fs = '\0';
- return sprintf(format, n);
-}
-
-/*! \fn TQCString &TQCString::setNum(float n, char f, int prec)
- \overload
-*/
-
-/*!
- Sets the character at position \a index to \a c and expands the
- string if necessary, padding with spaces.
-
- Returns false if \a index was out of range and the string could
- not be expanded; otherwise returns true.
-*/
-
-bool TQCString::setExpand(uint index, char c)
-{
- uint oldlen = length();
- if (index >= oldlen) {
- resize(index+1);
- if (index > oldlen)
- memset(data() + oldlen, ' ', index - oldlen);
- }
- *(data() + index) = c;
- return true;
-}
-
-
-/*
- \fn TQCString::operator const char *() const
-
- Returns the string data.
-*/
-
-
-/*!
- \fn TQCString& TQCString::append(const char *str)
-
- Appends string \a str to the string and returns a reference to the
- string. Equivalent to operator+=().
-*/
-
-#ifndef QT_NO_DATASTREAM
-/*! \fn QDataStream &operator<<(QDataStream &s, const TQCString &str)
- \relates TQCString
-
- Writes string \a str to the stream \a s.
-
- \sa \link datastreamformat.html Format of the QDataStream operators \endlink
-*/
-QDataStream &operator<<(QDataStream &d, const TQCString &s)
-{
-printf("[WARNING] When using << on a QDataStream instead of a TQDataStream functionality may differ from Qt3\n\r");
- if (d.version() >= QDataStream::Qt_4_0)
- return operator<<(d, static_cast<const QByteArray &>(s));
-
- // we need to add a NUL to keep compatibility with Qt 3's QByteArray
- QByteArray copy = s;
- copy.append('\0');
- return operator<<(d, copy);
-}
-
-/*!
- \fn QDataStream &operator>>(QDataStream &s, TQCString &str)
- \relates TQCString
-
- Reads a string into \a str from the stream \a s.
-
- \sa \link datastreamformat.html Format of the QDataStream operators \endlink
-*/
-QDataStream &operator>>(QDataStream &d, TQCString &s) {
-printf("[WARNING] When using << on a QDataStream instead of a TQDataStream functionality may differ from Qt3\n\r");
- operator>>(d, static_cast<QByteArray &>(s));
- if (d.version() < QDataStream::Qt_4_0 && s.endsWith('\0'))
- s.chop(1); // ending NUL
- return d;
-}
-
-#if 0
-// I don't think this works...
-
-/*! \fn TQDataStream &operator<<(TQDataStream &s, const TQCString &str)
- \relates TQCString
-
- Writes string \a str to the stream \a s.
-
- \sa \link datastreamformat.html Format of the TQDataStream operators \endlink
-*/
-TQDataStream &operator<<(TQDataStream &d, const TQCString &s)
-{
- if (d.version() >= QDataStream::Qt_4_0) {
- QDataStream &qds = operator<<(static_cast<QDataStream &>(d), static_cast<const QByteArray &>(s));
- TQDataStream &tqds = *static_cast<TQDataStream*>(&qds);
- return tqds;
- }
-
- // we need to add a NUL to keep compatibility with Qt 3's QByteArray
- QByteArray copy = s;
- copy.append('\0');
-
- QDataStream &qds = operator<<(static_cast<QDataStream &>(d), static_cast<const QByteArray &>(s));
- TQDataStream &tqds = *static_cast<TQDataStream*>(&qds);
- return tqds;
-}
-
-/*!
- \fn TQDataStream &operator>>(TQDataStream &s, TQCString &str)
- \relates TQCString
-
- Reads a string into \a str from the stream \a s.
-
- \sa \link datastreamformat.html Format of the TQDataStream operators \endlink
-*/
-TQDataStream &operator>>(TQDataStream &d, TQCString &s) {
- operator>>(d, static_cast<QByteArray &>(s));
- if (d.version() < QDataStream::Qt_4_0 && s.endsWith('\0'))
- s.chop(1); // ending NUL
- return d;
-}
-
-#endif
-
-#endif
-
-/*****************************************************************************
- TQCString stream functions
- *****************************************************************************/
-#ifndef TQT_NO_DATASTREAM
-/*!
- \relates TQCString
-
- Writes string \a str to the stream \a s.
-
- \sa \link datastreamformat.html Format of the TQDataStream operators \endlink
-*/
-TQDataStream &operator<<( TQDataStream &s, const TQCString &str )
-{
- return static_cast<TQDataStream &>(s.writeBytes( str.data(), str.size() ));
-}
-
-/*!
- \relates TQCString
-
- Reads a string into \a str from the stream \a s.
-
- \sa \link datastreamformat.html Format of the TQDataStream operators \endlink
-*/
-
-TQDataStream &operator>>( TQDataStream &s, TQCString &str )
-{
- str.detach();
- TQ_UINT32 len;
- s >> len; // read size of string
- if ( len == 0 || s.eof() ) { // end of file reached
- str.resize( 0 );
- return s;
- }
- if ( !str.TQByteArray::tqresize( (uint)len )) {// resize string
-#if defined(TQT_CHECK_NULL)
- qWarning( "TQDataStream: Not enough memory to read TQCString" );
-#endif
- len = 0;
- }
- if ( len > 0 ) // not null array
- s.readRawBytes( str.data(), (uint)len );
- return s;
-}
-#endif //TQT_NO_DATASTREAM
-
-/*****************************************************************************
- Documentation for related functions
- *****************************************************************************/
-
-/*!
- \fn bool operator==(const TQCString &s1, const TQCString &s2)
-
- \relates TQCString
-
- Returns true if \a s1 and \a s2 are equal; otherwise returns false.
-
- Equivalent to qstrcmp(\a s1, \a s2) == 0.
-*/
-
-/*!
- \fn bool operator==(const TQCString &s1, const char *s2)
- \overload
-
- \relates TQCString
-
- Returns true if \a s1 and \a s2 are equal; otherwise returns false.
-
- Equivalent to qstrcmp(\a s1, \a s2) == 0.
-*/
-
-/*!
- \fn bool operator==(const char *s1, const TQCString &s2)
- \overload
-
- \relates TQCString
-
- Returns true if \a s1 and \a s2 are equal; otherwise returns false.
-
- Equivalent to qstrcmp(\a s1, \a s2) == 0.
-*/
-
-/*!
- \fn bool operator!=(const TQCString &s1, const TQCString &s2)
-
- \relates TQCString
-
- Returns true if \a s1 and \a s2 are different; otherwise returns false.
-
- Equivalent to qstrcmp(\a s1, \a s2) != 0.
-*/
-
-/*!
- \fn bool operator!=(const TQCString &s1, const char *s2)
- \overload
-
- \relates TQCString
-
- Returns true if \a s1 and \a s2 are different; otherwise returns false.
-
- Equivalent to qstrcmp(\a s1, \a s2) != 0.
-*/
-
-/*!
- \fn bool operator!=(const char *s1, const TQCString &s2)
- \overload
-
- \relates TQCString
-
- Returns true if \a s1 and \a s2 are different; otherwise returns false.
-
- Equivalent to qstrcmp(\a s1, \a s2) != 0.
-*/
-
-/*!
- \fn bool operator<(const TQCString &s1, const char *s2)
-
- \relates TQCString
-
- Returns true if \a s1 is less than \a s2; otherwise returns false.
-
- Equivalent to qstrcmp(\a s1, \a s2) \< 0.
-*/
-
-/*!
- \fn bool operator<(const char *s1, const TQCString &s2)
- \overload
-
- \relates TQCString
-
- Returns true if \a s1 is less than \a s2; otherwise returns false.
-
- Equivalent to qstrcmp(\a s1, \a s2) \< 0.
-*/
-
-/*!
- \fn bool operator<=(const TQCString &s1, const char *s2)
-
- \relates TQCString
-
- Returns true if \a s1 is less than or equal to \a s2; otherwise
- returns false.
-
- Equivalent to qstrcmp(\a s1, \a s2) \<= 0.
-*/
-
-/*!
- \fn bool operator<=(const char *s1, const TQCString &s2)
- \overload
-
- \relates TQCString
-
- Returns true if \a s1 is less than or equal to \a s2; otherwise
- returns false.
-
- Equivalent to qstrcmp(\a s1, \a s2) \<= 0.
-*/
-
-/*!
- \fn bool operator>(const TQCString &s1, const char *s2)
-
- \relates TQCString
-
- Returns true if \a s1 is greater than \a s2; otherwise returns false.
-
- Equivalent to qstrcmp(\a s1, \a s2) \> 0.
-*/
-
-/*!
- \fn bool operator>(const char *s1, const TQCString &s2)
- \overload
-
- \relates TQCString
-
- Returns true if \a s1 is greater than \a s2; otherwise returns false.
-
- Equivalent to qstrcmp(\a s1, \a s2) \> 0.
-*/
-
-/*!
- \fn bool operator>=(const TQCString &s1, const char *s2)
-
- \relates TQCString
-
- Returns true if \a s1 is greater than or equal to \a s2; otherwise
- returns false.
-
- Equivalent to qstrcmp(\a s1, \a s2) \>= 0.
-*/
-
-/*!
- \fn bool operator>=(const char *s1, const TQCString &s2)
- \overload
-
- \relates TQCString
-
- Returns true if \a s1 is greater than or equal to \a s2; otherwise
- returns false.
-
- Equivalent to qstrcmp(\a s1, \a s2) \>= 0.
-*/
-
-/*!
- \fn const TQCString operator+(const TQCString &s1, const TQCString &s2)
-
- \relates TQCString
-
- Returns a string which consists of the concatenation of \a s1 and
- \a s2.
-*/
-
-/*!
- \fn const TQCString operator+(const TQCString &s1, const char *s2)
- \overload
-
- \relates TQCString
-
- Returns a string which consists of the concatenation of \a s1 and \a s2.
-*/
-
-/*!
- \fn const TQCString operator+(const char *s1, const TQCString &s2)
- \overload
-
- \relates TQCString
-
- Returns a string which consists of the concatenation of \a s1 and \a s2.
-*/
-
-/*!
- \fn const TQCString operator+(const TQCString &s, char c)
- \overload
-
- \relates TQCString
-
- Returns a string which consists of the concatenation of \a s and \a c.
-*/
-
-/*!
- \fn const TQCString operator+(char c, const TQCString &s)
- \overload
-
- \relates TQCString
- Returns a string which consists of the concatenation of \a c and \a s.
-*/
-
-/*!
- Returns the number of times the character \a c occurs in the
- string.
-
- The match is case sensitive if \a cs is TRUE, or case insensitive
- if \a cs if FALSE.
-
- \sa \link #asciinotion Note on character comparisons \endlink
-*/
-
-int TQCString::contains( char c, bool cs ) const
-{
- int count = 0;
- const char *d = data();
- if ( !d )
- return 0;
- if ( cs ) { // case sensitive
- while ( *d )
- if ( *d++ == c )
- count++;
- } else { // case insensitive
- c = tolower( (uchar) c );
- while ( *d ) {
- if ( tolower((uchar) *d) == c )
- count++;
- d++;
- }
- }
- return count;
-}
-
-/*!
- \overload
-
- Counts the number of overlapping occurrences of \a rx in the string.
-
- Example:
- \code
- TQString s = "banana and panama";
- TQRegExp r = TQRegExp( "a[nm]a", TRUE, FALSE );
- s.contains( r ); // 4 matches
- \endcode
-
- \sa find(), findRev()
-
- \warning If you want to apply this function repeatedly to the same
- string it is more efficient to convert the string to a TQString and
- apply the function to that.
-*/
-
-int TQCString::contains( const QRegExp &rx ) const
-{
- TQString d = TQString::fromAscii( data() );
- return d.contains( rx );
-}
-
-/*!
- \overload
-
- Returns the number of times \a str occurs in the string.
-
- The match is case sensitive if \a cs is TRUE, or case insensitive
- if \a cs if FALSE.
-
- This function counts overlapping substrings, for example, "banana"
- contains two occurrences of "ana".
-
- \sa findRev()
- \link #asciinotion Note on character comparisons \endlink
-*/
-
-int TQCString::contains( const char *str, bool cs ) const
-{
- int count = 0;
- int i = -1;
- uint l = length();
- // use find for the faster hashing algorithm
- while ( ( i = find ( str, i+1, cs, l ) ) != -1 )
- count++;
- return count;
-}
-
-#define REHASH( a ) \
- if ( sl_minus_1 < sizeof(uint) * CHAR_BIT ) \
- hashHaystack -= (a) << sl_minus_1; \
- hashHaystack <<= 1
-
-/*!
- Finds the first occurrence of the character \a c, starting at
- position \a index.
-
- The search is case sensitive if \a cs is TRUE, or case insensitive
- if \a cs is FALSE.
-
- Returns the position of \a c, or -1 if \a c could not be found.
-
- \sa \link #asciinotion Note on character comparisons \endlink
-*/
-
-int TQCString::find( char c, int index, bool cs ) const
-{
- if ( (uint)index >= size() ) // index outside string
- return -1;
- register const char *d;
- if ( cs ) { // case sensitive
- d = strchr( data()+index, c );
- } else {
- d = data()+index;
- c = tolower( (uchar) c );
- while ( *d && tolower((uchar) *d) != c )
- d++;
- if ( !*d && c ) // not found
- d = 0;
- }
- return d ? (int)(d - data()) : -1;
-}
-
-/*!
- \overload
-
- Finds the first occurrence of the string \a str, starting at
- position \a index.
-
- The search is case sensitive if \a cs is TRUE, or case insensitive
- if \a cs is FALSE.
-
- Returns the position of \a str, or -1 if \a str could not be
- found.
-
- \sa \link #asciinotion Note on character comparisons \endlink
-*/
-
-int TQCString::find( const char *str, int index, bool cs ) const
-{
- return find( str, index, cs, length() );
-}
-
-#ifndef TQT_NO_REGEXP_CAPTURE
-/*!
- \overload
-
- Finds the first occurrence of the regular expression \a rx,
- starting at position \a index.
-
- Returns the position of the next match, or -1 if \a rx was not
- found.
-
- \warning If you want to apply this function repeatedly to the same
- string it is more efficient to convert the string to a TQString and
- apply the function to that.
-*/
-
-int TQCString::find( const QRegExp& rx, int index ) const
-{
- TQString d = TQString::fromAscii( data() );
- return d.find( rx, index );
-}
-#endif // TQT_NO_REGEXP_CAPTURE
-
-int TQCString::find( const char *str, int index, bool cs, uint l ) const
-{
- if ( (uint)index >= size() )
- return -1;
- if ( !str )
- return -1;
- if ( !*str )
- return index;
- const uint sl = tqstrlen( str );
- if ( sl + index > l )
- return -1;
-
- if ( sl == 1 )
- return find( *str, index, cs );
-
- /*
- See TQString::find() for details.
- */
- const char* needle = str;
- const char* haystack = data() + index;
- const char* end = data() + (l-sl);
- const uint sl_minus_1 = sl-1;
- uint hashNeedle = 0, hashHaystack = 0,i;
-
- if ( cs ) {
- for ( i = 0; i < sl; ++i ) {
- hashNeedle = ((hashNeedle<<1) + needle[i] );
- hashHaystack = ((hashHaystack<<1) + haystack[i] );
- }
- hashHaystack -= *(haystack+sl_minus_1);
-
- while ( haystack <= end ) {
- hashHaystack += *(haystack+sl_minus_1);
- if ( hashHaystack == hashNeedle && *needle == *haystack
- && tqstrncmp( needle, haystack, sl ) == 0 )
- return haystack - data();
-
- REHASH( *haystack );
- ++haystack;
- }
- } else {
- for ( i = 0; i < sl; ++i ) {
- hashNeedle = ((hashNeedle<<1) +
- tolower( needle[i] ) );
- hashHaystack = ((hashHaystack<<1) +
- tolower( haystack[i] ) );
- }
- hashHaystack -= tolower(*(haystack+sl_minus_1));
-
- while ( haystack <= end ) {
- hashHaystack += tolower(*(haystack+sl_minus_1));
- if ( hashHaystack == hashNeedle
- && qstrnicmp( needle, haystack, sl ) == 0 )
- return haystack - data();
-
- REHASH( tolower(*haystack) );
- ++haystack;
- }
- }
- return -1;
-}
-
-#ifndef TQT_NO_REGEXP
-/*!
- \overload
-
- Replaces every occurrence of \a rx in the string with \a str.
- Returns a reference to the string.
-
- Example:
- \code
- TQString s = "banana";
- s.replace( TQRegExp("a.*a"), "" ); // becomes "b"
-
- s = "banana";
- s.replace( TQRegExp("^[bn]a"), "X" ); // becomes "Xnana"
-
- s = "banana";
- s.replace( TQRegExp("^[bn]a"), "" ); // becomes "nana"
- \endcode
-
- \warning If you want to apply this function repeatedly to the same
- string it is more efficient to convert the string to a TQString and
- apply the function to that.
-*/
-
-TQCString &TQCString::replace( const QRegExp &rx, const char *str )
-{
- TQString d = TQString::fromAscii( data() );
- TQString r = TQString::fromAscii( str );
- d.replace( rx, r );
- setStr( d.ascii() );
- return *this;
-}
-#endif //TQT_NO_REGEXP
-
-/*!
- Appends string \a str to the string and returns a reference to the string.
-*/
-
-TQCString& TQCString::operator+=( const char *str )
-{
-// if ( !str )
-// return *this; // nothing to append
-// detach();
-// uint len1 = length();
-// uint len2 = tqstrlen(str);
-// if ( !TQByteArray::tqresize( len1 + len2 + 1 ) )
-// return *this; // no memory
-// memcpy( data() + len1, str, len2 + 1 );
-// return *this;
-
- uint len2 = tqstrlen(QByteArray::constData());
- QByteArray::tqresize(len2); // Get rid of the old null terminator
- QByteArray::append(str);
- return *this;
-}
-
-/*!
- \overload
-
- Appends character \a c to the string and returns a reference to the string.
-*/
-
-TQCString &TQCString::operator+=( char c )
-{
-// detach();
-// uint len = length();
-// if ( !TQByteArray::tqresize( len + 2 ) )
-// return *this; // no memory
-// *(data() + len) = c;
-// *(data() + len+1) = '\0';
-// return *this;
-
- uint len2 = tqstrlen(QByteArray::constData());
- QByteArray::tqresize(len2); // Get rid of the old null terminator
- QByteArray::append(c);
- return *this;
-}
-
-TQCString& TQCString::operator+=( const QString qs )
-{
- uint len2 = tqstrlen(QByteArray::constData());
- QByteArray::tqresize(len2); // Get rid of the old null terminator
- QByteArray tmp = qs.toAscii();
- return append(tmp);
-}
-
-TQCString& TQCString::operator+=( const QByteArray qba )
-{
- uint len2 = tqstrlen(QByteArray::constData());
- QByteArray::tqresize(len2); // Get rid of the old null terminator
- return append(qba);
-}
-
-TQCString& TQCString::operator+=( const TQCString tqcs ) {
- return operator+=(tqcs.constData());
-}
-
-QT_END_NAMESPACE
-
-#else // USE_QT4
-
-/*!
- \class TQCString tqcstring.h
- \reentrant
- \brief The TQCString class provides an abstraction of the classic C
- zero-terminated char array (char *).
-
- \ingroup text
- \ingroup collection
- \ingroup tools
- \ingroup shared
-
- TQCString inherits TQByteArray, which is defined as
- TQMemArray\<char\>. Since TQCString is a TQMemArray, it uses \link
- shclass.html explicit sharing\endlink with a reference count.
-
- TQCString tries to behave like a more convenient \c{const char *}.
- The price of doing this is that some algorithms will perform
- badly. For example, append() is O(length()) since it scans for a
- null terminator. Although you might use TQCString for text that is
- never exposed to the user, for most purposes, and especially for
- user-visible text, you should use TQString. TQString provides
- implicit sharing, Unicode and other internationalization support,
- and is well optimized.
-
- Note that for the TQCString methods that take a \c{const char *}
- parameter the \c{const char *} must either be 0 (null) or not-null
- and '\0' (NUL byte) terminated; otherwise the results are
- undefined.
-
- A TQCString that has not been assigned to anything is \e null, i.e.
- both the length and the data pointer is 0. A TQCString that
- references the empty string ("", a single '\0' char) is \e empty.
- Both null and empty TQCStrings are legal parameters to the methods.
- Assigning \c{const char *} 0 to TQCString produces a null TQCString.
-
- The length() function returns the length of the string; resize()
- resizes the string and truncate() truncates the string. A string
- can be filled with a character using fill(). Strings can be left
- or right padded with characters using leftJustify() and
- rightJustify(). Characters, strings and regular expressions can be
- searched for using find() and findRev(), and counted using
- contains().
-
- Strings and characters can be inserted with insert() and appended
- with append(). A string can be prepended with prepend().
- Characters can be removed from the string with remove() and
- replaced with replace().
-
- Portions of a string can be extracted using left(), right() and
- mid(). Whitespace can be removed using stripWhiteSpace() and
- simplifyWhiteSpace(). Strings can be converted to uppercase or
- lowercase with upper() and lower() respectively.
-
- Strings that contain numbers can be converted to numbers with
- toShort(), toInt(), toLong(), toULong(), toFloat() and toDouble().
- Numbers can be converted to strings with setNum().
-
- Many operators are overloaded to work with TQCStrings. TQCString
- also supports some more obscure functions, e.g. sprintf(),
- setStr() and setExpand().
-
- \target asciinotion
- \sidebar Note on Character Comparisons
-
- In TQCString the notion of uppercase and lowercase and of which
- character is greater than or less than another character is locale
- dependent. This affects functions which support a case insensitive
- option or which compare or lowercase or uppercase their arguments.
- Case insensitive operations and comparisons will be accurate if
- both strings contain only ASCII characters. (If \c $LC_CTYPE is
- set, most Unix systems do "the right thing".) Functions that this
- affects include contains(), find(), findRev(), \l operator<(), \l
- operator<=(), \l operator>(), \l operator>=(), lower() and
- upper().
-
- This issue does not apply to \l{TQString}s since they represent
- characters using Unicode.
- \endsidebar
-
- Performance note: The TQCString methods for TQRegExp searching are
- implemented by converting the TQCString to a TQString and performing
- the search on that. This implies a deep copy of the TQCString data.
- If you are going to perform many TQRegExp searches on a large
- TQCString, you will get better performance by converting the
- TQCString to a TQString yourself, and then searching in the TQString.
-*/
-
-/*!
- \fn TQCString::TQCString()
-
- Constructs a null string.
-
- \sa isNull()
-*/
-
-/*!
- \fn TQCString::TQCString( const TQCString &s )
-
- Constructs a shallow copy \a s.
-
- \sa assign()
-*/
-
-/*!
- Constructs a string with room for \a size characters, including
- the '\0'-terminator. Makes a null string if \a size == 0.
-
- If \a size \> 0, then the first and last characters in the string
- are initialized to '\0'. All other characters are uninitialized.
-
- \sa resize(), isNull()
-*/
-
-TQCString::TQCString( int size )
- : TQByteArray( size )
-{
- if ( size > 0 ) {
- *data() = '\0'; // set terminator
- *(data()+(size-1)) = '\0';
- }
-}
-
-/*!
- Constructs a string that is a deep copy of \a str.
-
- If \a str is 0 a null string is created.
-
- \sa isNull()
-*/
-
-TQCString::TQCString( const char *str )
-{
- duplicate( str, tqstrlen(str) + 1 );
-}
-
-
-/*!
- Constructs a string that is a deep copy of \a str. The copy will
- be at most \a maxsize bytes long including the '\0'-terminator.
-
- Example:
- \code
- TQCString str( "helloworld", 6 ); // assigns "hello" to str
- \endcode
-
- If \a str contains a 0 byte within the first \a maxsize bytes, the
- resulting TQCString will be terminated by this 0. If \a str is 0 a
- null string is created.
-
- \sa isNull()
-*/
-
-TQCString::TQCString( const char *str, uint maxsize )
-{
- if ( str == 0 )
- return;
- uint len; // index of first '\0'
- for ( len = 0; len < maxsize - 1; len++ ) {
- if ( str[len] == '\0' )
- break;
- }
- TQByteArray::tqresize( len + 1 );
- memcpy( data(), str, len );
- data()[len] = 0;
-}
-
-/*!
- \reimp
-*/
-
-TQCString::~TQCString()
-{
-}
-
-TQCString &TQCString::operator=(const QByteArray &ba) {
- TQByteArray::operator=(ba);
- return *this;
-}
-
-/*!
- \fn TQCString &TQCString::operator=( const TQCString &s )
-
- Assigns a shallow copy of \a s to this string and returns a
- reference to this string.
-*/
-
-/*!
- \overload TQCString &TQCString::operator=( const char *str )
-
- Assigns a deep copy of \a str to this string and returns a
- reference to this string.
-
- If \a str is 0 a null string is created.
-
- \sa isNull()
-*/
-
-/*!
- \fn bool TQCString::isNull() const
-
- Returns TRUE if the string is null, i.e. if data() == 0; otherwise
- returns FALSE. A null string is also an empty string.
-
- Example:
- \code
- TQCString a; // a.data() == 0, a.size() == 0, a.length() == 0
- TQCString b == ""; // b.data() == "", b.size() == 1, b.length() == 0
- a.isNull(); // TRUE because a.data() == 0
- a.isEmpty(); // TRUE because a.length() == 0
- b.isNull(); // FALSE because b.data() == ""
- b.isEmpty(); // TRUE because b.length() == 0
- \endcode
-
- \sa isEmpty(), length(), size()
-*/
-
-/*!
- \fn bool TQCString::isEmpty() const
-
- Returns TRUE if the string is empty, i.e. if length() == 0;
- otherwise returns FALSE. An empty string is not always a null
- string.
-
- See example in isNull().
-
- \sa isNull(), length(), size()
-*/
-
-/*!
- \fn uint TQCString::length() const
-
- Returns the length of the string, excluding the '\0'-terminator.
- Equivalent to calling \c strlen(data()).
-
- Null strings and empty strings have zero length.
-
- \sa size(), isNull(), isEmpty()
-*/
-
-/*!
- \fn bool TQCString::truncate( uint pos )
-
- Truncates the string at position \a pos.
-
- Equivalent to calling \c resize(pos+1).
-
- Example:
- \code
- TQCString s = "truncate this string";
- s.truncate( 5 ); // s == "trunc"
- \endcode
-
- \sa resize()
-*/
-
-/*!
- Extends or shrinks the string to \a len bytes, including the
- '\0'-terminator.
-
- A '\0'-terminator is set at position \c{len - 1} unless
- \c{len == 0}.
-
- Example:
- \code
- TQCString s = "resize this string";
- s.resize( 7 ); // s == "resize"
- \endcode
-
- \sa truncate()
-*/
-
-bool TQCString::tqresize( uint len )
-{
- detach();
- uint wasNull = isNull();
- if ( !TQByteArray::tqresize(len) )
- return FALSE;
- if ( len )
- data()[len - 1] = '\0';
- if ( len > 0 && wasNull )
- data()[0] = '\0';
- return TRUE;
-}
-
-
-/*!
- Implemented as a call to the native vsprintf() (see the manual for
- your C library).
-
- If the string is shorter than 256 characters, this sprintf() calls
- resize(256) to decrease the chance of memory corruption. The
- string is resized back to its actual length before sprintf()
- returns.
-
- Example:
- \code
- TQCString s;
- s.sprintf( "%d - %s", 1, "first" ); // result < 256 chars
-
- TQCString big( 25000 ); // very long string
- big.sprintf( "%d - %s", 2, longString ); // result < 25000 chars
- \endcode
-
- \warning All vsprintf() implementations will write past the end of
- the target string (*this) if the \a format specification and
- arguments happen to be longer than the target string, and some
- will also fail if the target string is longer than some arbitrary
- implementation limit.
-
- Giving user-supplied arguments to sprintf() is risky: Sooner or
- later someone will paste a huge line into your application.
-*/
-
-TQCString &TQCString::sprintf( const char *format, ... )
-{
- detach();
- va_list ap;
- va_start( ap, format );
- if ( size() < 256 )
- TQByteArray::tqresize( 256 ); // make string big enough
-#ifdef TQT_VSNPRINTF
- TQT_VSNPRINTF( data(), size(), format, ap );
-#else
- vsprintf( data(), format, ap );
-#endif
- resize( tqstrlen(data()) + 1 ); // truncate
- va_end( ap );
- return *this;
-}
-
-
-/*!
- Fills the string with \a len bytes of character \a c, followed by
- a '\0'-terminator.
-
- If \a len is negative, then the current string length is used.
-
- Returns FALSE is \a len is nonnegative and there is not enough
- memory to resize the string; otherwise returns TRUE.
-*/
-
-bool TQCString::fill( char c, int len )
-{
- detach();
- if ( len < 0 )
- len = length();
- if ( !TQByteArray::fill(c,len+1) )
- return FALSE;
- *(data()+len) = '\0';
- return TRUE;
-}
-
-
-/*!
- \fn TQCString TQCString::copy() const
-
- Returns a deep copy of this string.
-
- \sa detach()
-*/
-
-
-/*!
- Finds the first occurrence of the character \a c, starting at
- position \a index.
-
- The search is case sensitive if \a cs is TRUE, or case insensitive
- if \a cs is FALSE.
-
- Returns the position of \a c, or -1 if \a c could not be found.
-
- \sa \link #asciinotion Note on character comparisons \endlink
-*/
-
-int TQCString::find( char c, int index, bool cs ) const
-{
- if ( (uint)index >= size() ) // index outside string
- return -1;
- register const char *d;
- if ( cs ) { // case sensitive
- d = strchr( data()+index, c );
- } else {
- d = data()+index;
- c = tolower( (uchar) c );
- while ( *d && tolower((uchar) *d) != c )
- d++;
- if ( !*d && c ) // not found
- d = 0;
- }
- return d ? (int)(d - data()) : -1;
-}
-
-#define REHASH( a ) \
- if ( sl_minus_1 < sizeof(uint) * CHAR_BIT ) \
- hashHaystack -= (a) << sl_minus_1; \
- hashHaystack <<= 1
-
-/*!
- \overload
-
- Finds the first occurrence of the string \a str, starting at
- position \a index.
-
- The search is case sensitive if \a cs is TRUE, or case insensitive
- if \a cs is FALSE.
-
- Returns the position of \a str, or -1 if \a str could not be
- found.
-
- \sa \link #asciinotion Note on character comparisons \endlink
-*/
-
-int TQCString::find( const char *str, int index, bool cs ) const
-{
- return find( str, index, cs, length() );
-}
-
-int TQCString::find( const char *str, int index, bool cs, uint l ) const
-{
- if ( (uint)index >= size() )
- return -1;
- if ( !str )
- return -1;
- if ( !*str )
- return index;
- const uint sl = tqstrlen( str );
- if ( sl + index > l )
- return -1;
-
- if ( sl == 1 )
- return find( *str, index, cs );
-
- /*
- See TQString::find() for details.
- */
- const char* needle = str;
- const char* haystack = data() + index;
- const char* end = data() + (l-sl);
- const uint sl_minus_1 = sl-1;
- uint hashNeedle = 0, hashHaystack = 0,i;
-
- if ( cs ) {
- for ( i = 0; i < sl; ++i ) {
- hashNeedle = ((hashNeedle<<1) + needle[i] );
- hashHaystack = ((hashHaystack<<1) + haystack[i] );
- }
- hashHaystack -= *(haystack+sl_minus_1);
-
- while ( haystack <= end ) {
- hashHaystack += *(haystack+sl_minus_1);
- if ( hashHaystack == hashNeedle && *needle == *haystack
- && tqstrncmp( needle, haystack, sl ) == 0 )
- return haystack - data();
-
- REHASH( *haystack );
- ++haystack;
- }
- } else {
- for ( i = 0; i < sl; ++i ) {
- hashNeedle = ((hashNeedle<<1) +
- tolower( needle[i] ) );
- hashHaystack = ((hashHaystack<<1) +
- tolower( haystack[i] ) );
- }
- hashHaystack -= tolower(*(haystack+sl_minus_1));
-
- while ( haystack <= end ) {
- hashHaystack += tolower(*(haystack+sl_minus_1));
- if ( hashHaystack == hashNeedle
- && qstrnicmp( needle, haystack, sl ) == 0 )
- return haystack - data();
-
- REHASH( tolower(*haystack) );
- ++haystack;
- }
- }
- return -1;
-}
-
-
-/*!
- Finds the first occurrence of the character \a c, starting at
- position \a index and searching backwards.
-
- The search is case sensitive if \a cs is TRUE, or case insensitive
- if \a cs is FALSE.
-
- Returns the position of \a c, or -1 if \a c could not be found.
-
- \sa \link #asciinotion Note on character comparisons \endlink
-*/
-
-int TQCString::findRev( char c, int index, bool cs ) const
-{
- register const char *b = data();
- register const char *d;
- if ( index < 0 )
- index = length();
- if ( (uint)index >= size() )
- return -1;
- d = b + index;
- if ( cs ) {
- while ( d >= b && *d != c )
- d--;
- } else {
- c = tolower( (uchar) c );
- while ( d >= b && tolower((uchar) *d) != c )
- d--;
- }
- return d >= b ? (int)(d - b) : -1;
-}
-
-/*!
- \overload
-
- Finds the first occurrence of the string \a str, starting at
- position \a index and searching backwards.
-
- The search is case sensitive if \a cs is TRUE, or case insensitive
- if \a cs is FALSE.
-
- Returns the position of \a str, or -1 if \a str could not be
- found.
-
- \sa \link #asciinotion Note on character comparisons \endlink
-*/
-
-int TQCString::findRev( const char *str, int index, bool cs ) const
-{
- /*
- See TQString::find() for explanations.
- */
- const uint sl = tqstrlen( str );
- const uint l = length();
- int delta = l-sl;
- if ( index < 0 )
- index = delta;
- if ( index < 0 || index > (int)l )
- return -1;
- if ( index > delta )
- index = delta;
-
- if ( sl == 1 )
- return findRev( *str, index, cs );
-
- const char* needle = str;
- const char* haystack = data() + index;
- const char* end = data();
- const uint sl_minus_1 = sl-1;
- const char* n = needle+sl_minus_1;
- const char* h = haystack+sl_minus_1;
- uint hashNeedle = 0, hashHaystack = 0, i;
-
- if ( cs ) {
- for ( i = 0; i < sl; ++i ) {
- hashNeedle = ((hashNeedle<<1) + *(n-i) );
- hashHaystack = ((hashHaystack<<1) + *(h-i) );
- }
- hashHaystack -= *haystack;
- while ( haystack >= end ) {
- hashHaystack += *haystack;
- if ( hashHaystack == hashNeedle && tqstrncmp( needle, haystack, sl ) == 0 )
- return haystack-data();
- --haystack;
- REHASH( *(haystack+sl) );
- }
- } else {
- for ( i = 0; i < sl; ++i ) {
- hashNeedle = ((hashNeedle<<1) + tolower( *(n-i) ) );
- hashHaystack = ((hashHaystack<<1) + tolower( *(h-i) ) );
- }
- hashHaystack -= tolower(*haystack);
- while ( haystack >= end ) {
- hashHaystack += tolower(*haystack);
- if ( hashHaystack == hashNeedle && qstrnicmp( needle, haystack, sl ) == 0 )
- return haystack-data();
- --haystack;
- REHASH( tolower(*(haystack+sl)) );
- }
- }
- return -1;
-}
-
-
-/*!
- Returns the number of times the character \a c occurs in the
- string.
-
- The match is case sensitive if \a cs is TRUE, or case insensitive
- if \a cs if FALSE.
-
- \sa \link #asciinotion Note on character comparisons \endlink
-*/
-
-int TQCString::contains( char c, bool cs ) const
-{
- int count = 0;
- const char *d = data();
- if ( !d )
- return 0;
- if ( cs ) { // case sensitive
- while ( *d )
- if ( *d++ == c )
- count++;
- } else { // case insensitive
- c = tolower( (uchar) c );
- while ( *d ) {
- if ( tolower((uchar) *d) == c )
- count++;
- d++;
- }
- }
- return count;
-}
-
-/*!
- \overload
-
- Returns the number of times \a str occurs in the string.
-
- The match is case sensitive if \a cs is TRUE, or case insensitive
- if \a cs if FALSE.
-
- This function counts overlapping substrings, for example, "banana"
- contains two occurrences of "ana".
-
- \sa findRev()
- \link #asciinotion Note on character comparisons \endlink
-*/
-
-int TQCString::contains( const char *str, bool cs ) const
-{
- int count = 0;
- int i = -1;
- uint l = length();
- // use find for the faster hashing algorithm
- while ( ( i = find ( str, i+1, cs, l ) ) != -1 )
- count++;
- return count;
-}
-
-/*!
- Returns a substring that contains the \a len leftmost characters
- of the string.
-
- The whole string is returned if \a len exceeds the length of the
- string.
-
- Example:
- \code
- TQCString s = "Pineapple";
- TQCString t = s.left( 4 ); // t == "Pine"
- \endcode
-
- \sa right(), mid()
-*/
-TQCString TQCString::left( uint len ) const
-{
- if ( isEmpty() ) {
- TQCString empty;
- return empty;
- } else if ( len >= size() ) {
- TQCString same( data() );
- return same;
- } else {
- TQCString s( len+1 );
- strncpy( s.data(), data(), len );
- *(s.data()+len) = '\0';
- return s;
- }
-}
-
-/*!
- Returns a substring that contains the \a len rightmost characters
- of the string.
-
- The whole string is returned if \a len exceeds the length of the
- string.
-
- Example:
- \code
- TQCString s = "Pineapple";
- TQCString t = s.right( 5 ); // t == "apple"
- \endcode
-
- \sa left(), mid()
-*/
-
-TQCString TQCString::right( uint len ) const
-{
- if ( isEmpty() ) {
- TQCString empty;
- return empty;
- } else {
- uint l = length();
- if ( len > l )
- len = l;
- char *p = const_cast<char*>(data()) + (l - len);
- return TQCString( p );
- }
-}
-
-/*!
- Returns a substring that contains at most \a len characters from
- this string, starting at position \a index.
-
- Returns a null string if the string is empty or if \a index is out
- of range. Returns the whole string from \a index if \a index+len
- exceeds the length of the string.
-
- Example:
- \code
- TQCString s = "Two pineapples";
- TQCString t = s.mid( 4, 3 ); // t == "pin"
- \endcode
-
- \sa left(), right()
-*/
-
-TQCString TQCString::mid( uint index, uint len ) const
-{
- uint slen = tqstrlen( data() );
- if ( isEmpty() || index >= slen ) {
- TQCString empty;
- return empty;
- } else {
- if ( len > slen-index )
- len = slen - index;
- register char *p = const_cast<char*>(data())+index;
- TQCString s( len+1 );
- strncpy( s.data(), p, len );
- *(s.data()+len) = '\0';
- return s;
- }
-}
-
-/*!
- Returns a string of length \a width (plus one for the terminating
- '\0') that contains this string padded with the \a fill character.
-
- If the length of the string exceeds \a width and \a truncate is
- FALSE (the default), then the returned string is a copy of the
- string. If the length of the string exceeds \a width and \a
- truncate is TRUE, then the returned string is a left(\a width).
-
- Example:
- \code
- TQCString s("apple");
- TQCString t = s.leftJustify(8, '.'); // t == "apple..."
- \endcode
-
- \sa rightJustify()
-*/
-
-TQCString TQCString::leftJustify( uint width, char fill, bool truncate ) const
-{
- TQCString result;
- int len = tqstrlen(data());
- int padlen = width - len;
- if ( padlen > 0 ) {
- result.TQByteArray::tqresize( len+padlen+1 );
- memcpy( result.data(), data(), len );
- memset( result.data()+len, fill, padlen );
- result[len+padlen] = '\0';
- } else {
- if ( truncate )
- result = left( width );
- else
- result = copy();
- }
- return result;
-}
-
-/*!
- Returns a string of length \a width (plus one for the terminating
- '\0') that contains zero or more of the \a fill character followed
- by this string.
-
- If the length of the string exceeds \a width and \a truncate is
- FALSE (the default), then the returned string is a copy of the
- string. If the length of the string exceeds \a width and \a
- truncate is TRUE, then the returned string is a left(\a width).
-
- Example:
- \code
- TQCString s("pie");
- TQCString t = s.rightJustify(8, '.'); // t == ".....pie"
- \endcode
-
- \sa leftJustify()
-*/
-
-TQCString TQCString::rightJustify( uint width, char fill, bool truncate ) const
-{
- TQCString result;
- int len = tqstrlen(data());
- int padlen = width - len;
- if ( padlen > 0 ) {
- result.TQByteArray::tqresize( len+padlen+1 );
- memset( result.data(), fill, padlen );
- memcpy( result.data()+padlen, data(), len );
- result[len+padlen] = '\0';
- } else {
- if ( truncate )
- result = left( width );
- else
- result = copy();
- }
- return result;
-}
-
-/*!
- Returns a new string that is a copy of this string converted to lower
- case.
-
- Example:
- \code
- TQCString s("Credit");
- TQCString t = s.lower(); // t == "credit"
- \endcode
-
- \sa upper()
- \link #asciinotion Note on character comparisons \endlink
-*/
-
-TQCString TQCString::lower() const
-{
- TQCString s( data() );
- register char *p = s.data();
- if ( p ) {
- while ( *p ) {
- *p = tolower( (uchar) *p );
- p++;
- }
- }
- return s;
-}
-
-/*!
- Returns a new string that is a copy of this string converted to upper case.
-
- Example:
- \code
- TQCString s( "Debit" );
- TQCString t = s.upper(); // t == "DEBIT"
- \endcode
-
- \sa lower()
- \link #asciinotion Note on character comparisons \endlink
-*/
-
-TQCString TQCString::upper() const
-{
- TQCString s( data() );
- register char *p = s.data();
- if ( p ) {
- while ( *p ) {
- *p = toupper(*p);
- p++;
- }
- }
- return s;
-}
-
-
-/*!
- Returns a new string that has white space removed from the start
- and the end.
-
- White space means the decimal ASCII codes 9, 10, 11, 12, 13 and
- 32.
-
- Example:
- \code
- TQCString s = " space ";
- TQCString t = s.stripWhiteSpace(); // t == "space"
- \endcode
-
- \sa simplifyWhiteSpace()
-*/
-
-TQCString TQCString::stripWhiteSpace() const
-{
- if ( isEmpty() ) // nothing to do
- return copy();
-
- register char *s = const_cast<char*>(data());
- TQCString result = s;
- int reslen = result.length();
- if ( !isspace((uchar) s[0]) && !isspace((uchar) s[reslen-1]) )
- return result; // returns a copy
-
- s = result.data();
- int start = 0;
- int end = reslen - 1;
- while ( isspace((uchar) s[start]) ) // skip white space from start
- start++;
- if ( s[start] == '\0' ) { // only white space
- result.resize( 1 );
- return result;
- }
- while ( end && isspace((uchar) s[end]) ) // skip white space from end
- end--;
- end -= start - 1;
- memmove( result.data(), &s[start], end );
- result.resize( end + 1 );
- return result;
-}
-
-
-/*!
- Returns a new string that has white space removed from the start
- and the end, plus any sequence of internal white space replaced
- with a single space (ASCII 32).
-
- White space means the decimal ASCII codes 9, 10, 11, 12, 13 and
- 32.
-
- \code
- TQCString s = " lots\t of\nwhite space ";
- TQCString t = s.simplifyWhiteSpace(); // t == "lots of white space"
- \endcode
-
- \sa stripWhiteSpace()
-*/
-
-TQCString TQCString::simplifyWhiteSpace() const
-{
- if ( isEmpty() ) // nothing to do
- return copy();
- TQCString result( size() );
- char *from = const_cast<char*>(data());
- char *to = result.data();
- char *first = to;
- for ( ;; ) {
- while ( isspace((uchar) *from) )
- from++;
- while ( *from && !isspace((uchar) *from) )
- *to++ = *from++;
- if ( *from )
- *to++ = 0x20; // ' '
- else
- break;
- }
- if ( to > first && *(to-1) == 0x20 )
- to--;
- *to = '\0';
- result.resize( (int)(to - result.data()) + 1 );
- return result;
-}
-
-
-/*!
- \overload
-
- Inserts string \a s into the string at position \a index.
-
- If \a index is beyond the end of the string, the string is
- padded with spaces (ASCII 32) to length \a index and then \a s
- is appended.
-
- \code
- TQCString s = "I like fish";
- s.insert( 2, "don't "); // s == "I don't like fish"
-
- s = "x"; // index 01234
- s.insert( 3, "yz" ); // s == "x yz"
- \endcode
-*/
-
-TQCString &TQCString::insert( uint index, const char *s )
-{
- int len = tqstrlen(s);
- if ( len == 0 )
- return *this;
- uint olen = length();
- int nlen = olen + len;
- if ( index >= olen ) { // insert after end of string
- detach();
- if ( TQByteArray::tqresize(nlen+index-olen+1 ) ) {
- memset( data()+olen, ' ', index-olen );
- memcpy( data()+index, s, len+1 );
- }
- } else {
- detach();
- if ( TQByteArray::tqresize(nlen+1 ) ) { // normal insert
- memmove( data()+index+len, data()+index, olen-index+1 );
- memcpy( data()+index, s, len );
- }
- }
- return *this;
-}
-
-/*!
- Inserts character \a c into the string at position \a index and
- returns a reference to the string.
-
- If \a index is beyond the end of the string, the string is
- padded with spaces (ASCII 32) to length \a index and then \a c
- is appended.
-
- Example:
- \code
- TQCString s = "Yes";
- s.insert( 3, '!'); // s == "Yes!"
- \endcode
-
- \sa remove(), replace()
-*/
-
-TQCString &TQCString::insert( uint index, char c ) // insert char
-{
- char buf[2];
- buf[0] = c;
- buf[1] = '\0';
- return insert( index, buf );
-}
-
-/*!
- \fn TQCString &TQCString::prepend( const char *s )
-
- Prepend \a s to the string. Equivalent to insert(0, s).
-
- \sa insert()
-*/
-
-/*!
- Removes \a len characters from the string, starting at position \a
- index, and returns a reference to the string.
-
- If \a index is out of range, nothing happens. If \a index is
- valid, but \a index + \a len is larger than the length of the
- string, the string is truncated at position \a index.
-
- \code
- TQCString s = "Montreal";
- s.remove( 1, 4 ); // s == "Meal"
- \endcode
-
- \sa insert(), replace()
-*/
-
-TQCString &TQCString::remove( uint index, uint len )
-{
- uint olen = length();
- if ( index + len >= olen ) { // range problems
- if ( index < olen ) { // index ok
- detach();
- resize( index+1 );
- }
- } else if ( len != 0 ) {
- detach();
- memmove( data()+index, data()+index+len, olen-index-len+1 );
- TQByteArray::tqresize(olen-len+1 );
- }
- return *this;
-}
-
-/*!
- Replaces \a len characters from the string, starting at position
- \a index, with \a str, and returns a reference to the string.
-
- If \a index is out of range, nothing is removed and \a str is
- appended at the end of the string. If \a index is valid, but \a
- index + \a len is larger than the length of the string, \a str
- replaces the rest of the string from position \a index.
-
- \code
- TQCString s = "Say yes!";
- s.replace( 4, 3, "NO" ); // s == "Say NO!"
- \endcode
-
- \sa insert(), remove()
-*/
-
-TQCString &TQCString::replace( uint index, uint len, const char *str )
-{
- remove( index, len );
- insert( index, str );
- return *this;
-}
-
-
-/*! \overload
-
- Replaces every occurrence of the character \a c in the string
- with \a after. Returns a reference to the string.
-
- Example:
- \code
- TQCString s = "a,b,c";
- s.replace( ',', " or " );
- // s == "a or b or c"
- \endcode
-*/
-TQCString &TQCString::replace( char c, const char *after )
-{
- char str[2];
- str[0] = c;
- str[1] = '\0';
- return replace( str, after );
-}
-
-/*! \overload
-
- Replaces every occurrence of the string \a before in the string
- with the string \a after. Returns a reference to the string.
-
- Example:
- \code
- TQCString s = "Greek is Greek";
- s.replace( "Greek", "English" );
- // s == "English is English"
- \endcode
-*/
-
-TQCString &TQCString::replace( const char *before, const char *after )
-{
- if ( before == after || isNull() )
- return *this;
-
- detach();
-
- int index = 0;
- const int bl = before ? int(strlen( before )) : 0;
- const int al = after ? int(strlen( after )) : 0;
- char *d = data();
- uint len = length();
-
- if ( bl == al ) {
- if ( bl ) {
- while( (index = find( before, index, TRUE, len ) ) != -1 ) {
- memcpy( d+index, after, al );
- index += bl;
- }
- }
- } else if ( al < bl ) {
- uint to = 0;
- uint movestart = 0;
- uint num = 0;
- while( (index = find( before, index, TRUE, len ) ) != -1 ) {
- if ( num ) {
- int msize = index - movestart;
- if ( msize > 0 ) {
- memmove( d + to, d + movestart, msize );
- to += msize;
- }
- } else {
- to = index;
- }
- if ( al ) {
- memcpy( d + to, after, al );
- to += al;
- }
- index += bl;
- movestart = index;
- num++;
- }
- if ( num ) {
- int msize = len - movestart;
- if ( msize > 0 )
- memmove( d + to, d + movestart, msize );
- resize( len - num*(bl-al) + 1 );
- }
- } else {
- // the most complex case. We don't want to loose performance by doing repeated
- // copies and reallocs of the string.
- while( index != -1 ) {
- uint indices[4096];
- uint pos = 0;
- while( pos < 4095 ) {
- index = find(before, index, TRUE, len);
- if ( index == -1 )
- break;
- indices[pos++] = index;
- index += bl;
- // avoid infinite loop
- if ( !bl )
- index++;
- }
- if ( !pos )
- break;
-
- // we have a table of replacement positions, use them for fast replacing
- int adjust = pos*(al-bl);
- // index has to be adjusted in case we get back into the loop above.
- if ( index != -1 )
- index += adjust;
- uint newlen = len + adjust;
- int moveend = len;
- if ( newlen > len ) {
- resize( newlen + 1 );
- len = newlen;
- }
- d = data();
-
- while( pos ) {
- pos--;
- int movestart = indices[pos] + bl;
- int insertstart = indices[pos] + pos*(al-bl);
- int moveto = insertstart + al;
- memmove( d + moveto, d + movestart, (moveend - movestart) );
- if ( after )
- memcpy( d + insertstart, after, al );
- moveend = movestart - bl;
- }
- }
- }
- return *this;
-}
-
-/*! \overload
-
- Replaces every occurrence of \a c1 with the char \a c2.
- Returns a reference to the string.
-*/
-TQCString &TQCString::replace( char c1, char c2 )
-{
- detach();
- uint i = 0;
- char *d = data();
- uint len = length();
- while ( i < len ) {
- if ( d[i] == c1 )
- d[i] = c2;
- i++;
- }
- return *this;
-}
-
-
-#ifndef TQT_NO_REGEXP_CAPTURE
-/*!
- \overload
-
- Finds the first occurrence of the regular expression \a rx,
- starting at position \a index.
-
- Returns the position of the next match, or -1 if \a rx was not
- found.
-
- \warning If you want to apply this function repeatedly to the same
- string it is more efficient to convert the string to a TQString and
- apply the function to that.
-*/
-
-int TQCString::find( const TQRegExp& rx, int index ) const
-{
- TQString d = TQString::fromAscii( data() );
- return d.find( rx, index );
-}
-
-/*!
- \overload
-
- Finds the first occurrence of the regular expression \a rx,
- starting at position \a index and searching backwards.
-
- Returns the position of the next match (backwards), or -1 if \a rx
- was not found.
-
- \warning If you want to apply this function repeatedly to the same
- string it is more efficient to convert the string to a TQString and
- apply the function to that.
-*/
-
-int TQCString::findRev( const TQRegExp& rx, int index ) const
-{
- TQString d = TQString::fromAscii( data() );
- return d.findRev( rx, index );
-}
-
-/*!
- \overload
-
- Counts the number of overlapping occurrences of \a rx in the string.
-
- Example:
- \code
- TQString s = "banana and panama";
- TQRegExp r = TQRegExp( "a[nm]a", TRUE, FALSE );
- s.contains( r ); // 4 matches
- \endcode
-
- \sa find(), findRev()
-
- \warning If you want to apply this function repeatedly to the same
- string it is more efficient to convert the string to a TQString and
- apply the function to that.
-*/
-
-int TQCString::contains( const TQRegExp &rx ) const
-{
- TQString d = TQString::fromAscii( data() );
- return d.contains( rx );
-}
-
-
-/*!
- \overload
-
- Replaces every occurrence of \a rx in the string with \a str.
- Returns a reference to the string.
-
- Example:
- \code
- TQString s = "banana";
- s.replace( TQRegExp("a.*a"), "" ); // becomes "b"
-
- s = "banana";
- s.replace( TQRegExp("^[bn]a"), "X" ); // becomes "Xnana"
-
- s = "banana";
- s.replace( TQRegExp("^[bn]a"), "" ); // becomes "nana"
- \endcode
-
- \warning If you want to apply this function repeatedly to the same
- string it is more efficient to convert the string to a TQString and
- apply the function to that.
-*/
-
-TQCString &TQCString::replace( const TQRegExp &rx, const char *str )
-{
- TQString d = TQString::fromAscii( data() );
- TQString r = TQString::fromAscii( str );
- d.replace( rx, r );
- setStr( d.ascii() );
- return *this;
-}
-#endif //TQT_NO_REGEXP
-
-/*!
- Returns the string converted to a \c long value.
-
- If \a ok is not 0: \a *ok is set to FALSE if the string is not a
- number, or if it has trailing garbage; otherwise \a *ok is set to
- TRUE.
-*/
-
-long TQCString::toLong( bool *ok ) const
-{
- char *p = const_cast<char*>(data());
- long val=0;
- const long max_mult = LONG_MAX / 10;
- bool is_ok = FALSE;
- int neg = 0;
- if ( !p )
- goto bye;
- while ( isspace((uchar) *p) ) // skip leading space
- p++;
- if ( *p == '-' ) {
- p++;
- neg = 1;
- } else if ( *p == '+' ) {
- p++;
- }
- if ( !isdigit((uchar) *p) )
- goto bye;
- while ( isdigit((uchar) *p) ) {
- if ( val > max_mult || (val == max_mult && (*p-'0') > 7+neg) )
- goto bye;
- val = 10*val + (*p++ - '0');
- }
- if ( neg )
- val = -val;
- while ( isspace((uchar) *p) ) // skip trailing space
- p++;
- if ( *p == '\0' )
- is_ok = TRUE;
-bye:
- if ( ok )
- *ok = is_ok;
- return is_ok ? val : 0;
-}
-
-/*!
- Returns the string converted to an \c{unsigned long} value.
-
- If \a ok is not 0: \a *ok is set to FALSE if the string is not a
- number, or if it has trailing garbage; otherwise \a *ok is set to
- TRUE.
-*/
-
-ulong TQCString::toULong( bool *ok ) const
-{
- char *p = const_cast<char*>(data());
- ulong val=0;
- const ulong max_mult = ULONG_MAX / 10;
- bool is_ok = FALSE;
- if ( !p )
- goto bye;
- while ( isspace((uchar) *p) ) // skip leading space
- p++;
- if ( *p == '+' )
- p++;
- if ( !isdigit((uchar) *p) )
- goto bye;
- while ( isdigit((uchar) *p) ) {
- if ( val > max_mult || (val == max_mult && (*p-'0') > 5) )
- goto bye;
- val = 10*val + (*p++ - '0');
- }
- while ( isspace((uchar) *p) ) // skip trailing space
- p++;
- if ( *p == '\0' )
- is_ok = TRUE;
-bye:
- if ( ok )
- *ok = is_ok;
- return is_ok ? val : 0;
-}
-
-/*!
- Returns the string converted to a \c{short} value.
-
- If \a ok is not 0: \a *ok is set to FALSE if the string is not a
- number, is out of range, or if it has trailing garbage; otherwise
- \a *ok is set to TRUE.
-*/
-
-short TQCString::toShort( bool *ok ) const
-{
- long v = toLong( ok );
- if ( v < SHRT_MIN || v > SHRT_MAX ) {
- if ( ok )
- *ok = FALSE;
- v = 0;
- }
- return (short)v;
-}
-
-/*!
- Returns the string converted to an \c{unsigned short} value.
-
- If \a ok is not 0: \a *ok is set to FALSE if the string is not a
- number, is out of range, or if it has trailing garbage; otherwise
- \a *ok is set to TRUE.
-*/
-
-ushort TQCString::toUShort( bool *ok ) const
-{
- ulong v = toULong( ok );
- if ( v > USHRT_MAX ) {
- if ( ok )
- *ok = FALSE;
- v = 0;
- }
- return (ushort)v;
-}
-
-
-/*!
- Returns the string converted to a \c{int} value.
-
- If \a ok is not 0: \a *ok is set to FALSE if the string is not a
- number, or if it has trailing garbage; otherwise \a *ok is set to
- TRUE.
-*/
-
-int TQCString::toInt( bool *ok ) const
-{
- long v = toLong( ok );
- if ( v < INT_MIN || v > INT_MAX ) {
- if ( ok )
- *ok = FALSE;
- v = 0;
- }
- return (int)v;
-}
-
-/*!
- Returns the string converted to an \c{unsigned int} value.
-
- If \a ok is not 0: \a *ok is set to FALSE if the string is not a
- number, or if it has trailing garbage; otherwise \a *ok is set to
- TRUE.
-*/
-
-uint TQCString::toUInt( bool *ok ) const
-{
- ulong v = toULong( ok );
- if ( v > UINT_MAX ) {
- if ( ok )
- *ok = FALSE;
- v = 0;
- }
- return (uint)v;
-}
-
-/*!
- Returns the string converted to a \c{double} value.
-
- If \a ok is not 0: \a *ok is set to FALSE if the string is not a
- number, or if it has trailing garbage; otherwise \a *ok is set to
- TRUE.
-*/
-
-double TQCString::toDouble( bool *ok ) const
-{
- char *end;
- double val = strtod( data() ? data() : "", &end );
- if ( ok )
- *ok = ( data() && *data() && ( end == 0 || *end == '\0' ) );
- return val;
-}
-
-/*!
- Returns the string converted to a \c{float} value.
-
- If \a ok is not 0: \a *ok is set to FALSE if the string is not a
- number, or if it has trailing garbage; otherwise \a *ok is set to
- TRUE.
-*/
-
-float TQCString::toFloat( bool *ok ) const
-{
- return (float)toDouble( ok );
-}
-
-
-/*!
- Makes a deep copy of \a str. Returns a reference to the string.
-*/
-
-TQCString &TQCString::setStr( const char *str )
-{
- detach();
- if ( str ) { // valid string
-// store( str, tqstrlen(str)+1 );
- int slen = tqstrlen(str)+1;
- resize(slen);
- memcpy(QByteArray::data(), str, slen);
- }
- else // empty
- resize( 0 );
- return *this;
-}
-
-/*!
- \overload
-
- Sets the string to the string representation of the number \a n
- and returns a reference to the string.
-*/
-
-TQCString &TQCString::setNum( long n )
-{
- detach();
- char buf[20];
- register char *p = &buf[19];
- bool neg;
- if ( n < 0 ) {
- neg = TRUE;
- n = -n;
- } else {
- neg = FALSE;
- }
- *p = '\0';
- do {
- *--p = ((int)(n%10)) + '0';
- n /= 10;
- } while ( n );
- if ( neg )
- *--p = '-';
-// store( p, tqstrlen(p)+1 );
- int slen = tqstrlen(p)+1;
- resize(slen);
- memcpy(QByteArray::data(), p, slen);
- return *this;
-}
-
-/*!
- \overload
-
- Sets the string to the string representation of the number \a n
- and returns a reference to the string.
-*/
-
-TQCString &TQCString::setNum( ulong n )
-{
- detach();
- char buf[20];
- register char *p = &buf[19];
- *p = '\0';
- do {
- *--p = ((int)(n%10)) + '0';
- n /= 10;
- } while ( n );
-// store( p, tqstrlen(p)+1 );
- int slen = tqstrlen(p)+1;
- resize(slen);
- memcpy(QByteArray::data(), p, slen);
- return *this;
-}
-
-/*!
- \overload TQCString &TQCString::setNum( int n )
-
- Sets the string to the string representation of the number \a n
- and returns a reference to the string.
-*/
-
-/*!
- \overload TQCString &TQCString::setNum( uint n )
-
- Sets the string to the string representation of the number \a n
- and returns a reference to the string.
-*/
-
-/*!
- \overload TQCString &TQCString::setNum( short n )
-
- Sets the string to the string representation of the number \a n
- and returns a reference to the string.
-*/
-
-/*!
- \overload TQCString &TQCString::setNum( ushort n )
-
- Sets the string to the string representation of the number \a n
- and returns a reference to the string.
-*/
-
-/*!
- Sets the string to the string representation of the number \a n
- and returns a reference to the string.
-
- The format of the string representation is specified by the format
- character \a f, and the precision (number of digits after the
- decimal point) is specified with \a prec.
-
- The valid formats for \a f are 'e', 'E', 'f', 'g' and 'G'. The
- formats are the same as for sprintf(); they are explained in \l
- TQString::arg().
-*/
-
-TQCString &TQCString::setNum( double n, char f, int prec )
-{
-#if defined(TQT_CHECK_RANGE)
- if ( !(f=='f' || f=='F' || f=='e' || f=='E' || f=='g' || f=='G') )
- qWarning( "TQCString::setNum: Invalid format char '%c'", f );
-#endif
- char format[20];
- register char *fs = format; // generate format string
- *fs++ = '%'; // "%.<prec>l<f>"
- if ( prec > 99 )
- prec = 99;
- *fs++ = '.';
- if ( prec >= 10 ) {
- *fs++ = prec / 10 + '0';
- *fs++ = prec % 10 + '0';
- } else {
- *fs++ = prec + '0';
- }
- *fs++ = 'l';
- *fs++ = f;
- *fs = '\0';
- return sprintf( format, n );
-}
-
-/*! \overload TQCString &TQCString::setNum( float n, char f, int prec ) */
-
-
-/*!
- Sets the character at position \a index to \a c and expands the
- string if necessary, padding with spaces.
-
- Returns FALSE if \a index was out of range and the string could
- not be expanded; otherwise returns TRUE.
-*/
-
-bool TQCString::setExpand( uint index, char c )
-{
- detach();
- uint oldlen = length();
- if ( index >= oldlen ) {
- if ( !TQByteArray::tqresize( index+2 ) ) // no memory
- return FALSE;
- if ( index > oldlen )
- memset( data() + oldlen, ' ', index - oldlen );
- *(data() + index+1) = '\0'; // terminate padded string
- }
- *(data() + index) = c;
- return TRUE;
-}
-
-
-/*!
- \fn TQCString::operator const char *() const
-
- Returns the string data.
-*/
-
-
-/*!
- \fn TQCString& TQCString::append( const char *str )
-
- Appends string \a str to the string and returns a reference to the
- string. Equivalent to operator+=().
-*/
-
-/*!
- Appends string \a str to the string and returns a reference to the string.
-*/
-
-TQCString& TQCString::operator+=( const char *str )
-{
- if ( !str )
- return *this; // nothing to append
- detach();
- uint len1 = length();
- uint len2 = tqstrlen(str);
- if ( !TQByteArray::tqresize( len1 + len2 + 1 ) )
- return *this; // no memory
- memcpy( data() + len1, str, len2 + 1 );
- return *this;
-}
-
-/*!
- \overload
-
- Appends character \a c to the string and returns a reference to the string.
-*/
-
-TQCString &TQCString::operator+=( char c )
-{
- detach();
- uint len = length();
- if ( !TQByteArray::tqresize( len + 2 ) )
- return *this; // no memory
- *(data() + len) = c;
- *(data() + len+1) = '\0';
- return *this;
-}
-
-TQCString& TQCString::operator+=( const QString qs )
-{
- uint len2 = tqstrlen(QByteArray::constData());
- TQByteArray::tqresize(len2); // Get rid of the old null terminator
- QByteArray tmp = qs.toAscii();
- return append(tmp);
-}
-
-TQCString& TQCString::operator+=( const QByteArray qba )
-{
- uint len2 = tqstrlen(QByteArray::constData());
- TQByteArray::tqresize(len2); // Get rid of the old null terminator
- return append(qba);
-}
-
-TQCString& TQCString::operator+=( const TQCString tqcs ) {
- return operator+=(tqcs.constData());
-}
-
-
-/*****************************************************************************
- TQCString stream functions
- *****************************************************************************/
-#ifndef TQT_NO_DATASTREAM
-/*!
- \relates TQCString
-
- Writes string \a str to the stream \a s.
-
- \sa \link datastreamformat.html Format of the TQDataStream operators \endlink
-*/
-TQDataStream &operator<<( TQDataStream &s, const TQCString &str )
-{
- return static_cast<TQDataStream&>(s.writeBytes( str.data(), str.size() ));
-}
-
-/*!
- \relates TQCString
-
- Reads a string into \a str from the stream \a s.
-
- \sa \link datastreamformat.html Format of the TQDataStream operators \endlink
-*/
-
-TQDataStream &operator>>( TQDataStream &s, TQCString &str )
-{
- str.detach();
- TQ_UINT32 len;
- s >> len; // read size of string
- if ( len == 0 || s.eof() ) { // end of file reached
- str.resize( 0 );
- return s;
- }
- if ( !str.TQByteArray::tqresize( (uint)len )) {// resize string
-#if defined(TQT_CHECK_NULL)
- qWarning( "TQDataStream: Not enough memory to read TQCString" );
-#endif
- len = 0;
- }
- if ( len > 0 ) // not null array
- s.readRawBytes( str.data(), (uint)len );
- return s;
-}
-#endif //TQT_NO_DATASTREAM
-
-/*****************************************************************************
- Documentation for related functions
- *****************************************************************************/
-
-/*!
- \fn bool operator==( const TQCString &s1, const TQCString &s2 )
-
- \relates TQCString
-
- Returns TRUE if \a s1 and \a s2 are equal; otherwise returns FALSE.
-
- Equivalent to qstrcmp(\a s1, \a s2) == 0.
-*/
-
-/*!
- \overload bool operator==( const TQCString &s1, const char *s2 )
-
- \relates TQCString
-
- Returns TRUE if \a s1 and \a s2 are equal; otherwise returns FALSE.
-
- Equivalent to qstrcmp(\a s1, \a s2) == 0.
-*/
-
-/*!
- \overload bool operator==( const char *s1, const TQCString &s2 )
-
- \relates TQCString
-
- Returns TRUE if \a s1 and \a s2 are equal; otherwise returns FALSE.
-
- Equivalent to qstrcmp(\a s1, \a s2) == 0.
-*/
-
-/*!
- \fn bool operator!=( const TQCString &s1, const TQCString &s2 )
-
- \relates TQCString
-
- Returns TRUE if \a s1 and \a s2 are different; otherwise returns FALSE.
-
- Equivalent to qstrcmp(\a s1, \a s2) != 0.
-*/
-
-/*!
- \overload bool operator!=( const TQCString &s1, const char *s2 )
-
- \relates TQCString
-
- Returns TRUE if \a s1 and \a s2 are different; otherwise returns FALSE.
-
- Equivalent to qstrcmp(\a s1, \a s2) != 0.
-*/
-
-/*!
- \overload bool operator!=( const char *s1, const TQCString &s2 )
-
- \relates TQCString
-
- Returns TRUE if \a s1 and \a s2 are different; otherwise returns FALSE.
-
- Equivalent to qstrcmp(\a s1, \a s2) != 0.
-*/
-
-/*!
- \fn bool operator<( const TQCString &s1, const char *s2 )
-
- \relates TQCString
-
- Returns TRUE if \a s1 is less than \a s2; otherwise returns FALSE.
-
- Equivalent to qstrcmp(\a s1, \a s2) \< 0.
-
- \sa \link #asciinotion Note on character comparisons \endlink
-*/
-
-/*!
- \overload bool operator<( const char *s1, const TQCString &s2 )
-
- \relates TQCString
-
- Returns TRUE if \a s1 is less than \a s2; otherwise returns FALSE.
-
- Equivalent to qstrcmp(\a s1, \a s2) \< 0.
-
- \sa \link #asciinotion Note on character comparisons \endlink
-*/
-
-/*!
- \fn bool operator<=( const TQCString &s1, const char *s2 )
-
- \relates TQCString
-
- Returns TRUE if \a s1 is less than or equal to \a s2; otherwise
- returns FALSE.
-
- Equivalent to qstrcmp(\a s1, \a s2) \<= 0.
-
- \sa \link #asciinotion Note on character comparisons \endlink
-*/
-
-/*!
- \overload bool operator<=( const char *s1, const TQCString &s2 )
-
- \relates TQCString
-
- Returns TRUE if \a s1 is less than or equal to \a s2; otherwise
- returns FALSE.
-
- Equivalent to qstrcmp(\a s1, \a s2) \<= 0.
-
- \sa \link #asciinotion Note on character comparisons \endlink
-*/
-
-/*!
- \fn bool operator>( const TQCString &s1, const char *s2 )
-
- \relates TQCString
-
- Returns TRUE if \a s1 is greater than \a s2; otherwise returns FALSE.
-
- Equivalent to qstrcmp(\a s1, \a s2) \> 0.
-
- \sa \link #asciinotion Note on character comparisons \endlink
-*/
-
-/*!
- \overload bool operator>( const char *s1, const TQCString &s2 )
-
- \relates TQCString
-
- Returns TRUE if \a s1 is greater than \a s2; otherwise returns FALSE.
-
- Equivalent to qstrcmp(\a s1, \a s2) \> 0.
-
- \sa \link #asciinotion Note on character comparisons \endlink
-*/
-
-/*!
- \fn bool operator>=( const TQCString &s1, const char *s2 )
-
- \relates TQCString
-
- Returns TRUE if \a s1 is greater than or equal to \a s2; otherwise
- returns FALSE.
-
- Equivalent to qstrcmp(\a s1, \a s2) \>= 0.
-
- \sa \link #asciinotion Note on character comparisons \endlink
-*/
-
-/*!
- \overload bool operator>=( const char *s1, const TQCString &s2 )
-
- \relates TQCString
-
- Returns TRUE if \a s1 is greater than or equal to \a s2; otherwise
- returns FALSE.
-
- Equivalent to qstrcmp(\a s1, \a s2) \>= 0.
-
- \sa \link #asciinotion Note on character comparisons \endlink
-*/
-
-/*!
- \fn const TQCString operator+( const TQCString &s1, const TQCString &s2 )
-
- \relates TQCString
-
- Returns a string which consists of the concatenation of \a s1 and
- \a s2.
-*/
-
-/*!
- \overload const TQCString operator+( const TQCString &s1, const char *s2 )
-
- \relates TQCString
-
- Returns a string which consists of the concatenation of \a s1 and \a s2.
-*/
-
-/*!
- \overload const TQCString operator+( const char *s1, const TQCString &s2 )
-
- \relates TQCString
-
- Returns a string which consists of the concatenation of \a s1 and \a s2.
-*/
-
-/*!
- \overload const TQCString operator+( const TQCString &s, char c )
-
- \relates TQCString
-
- Returns a string which consists of the concatenation of \a s and \a c.
-*/
-
-/*!
- \overload const TQCString operator+( char c, const TQCString &s )
-
- \relates TQCString
-
- Returns a string which consists of the concatenation of \a c and \a s.
-*/
-
-#endif // USE_QT4 \ No newline at end of file