|
Packit Service |
50c9f2 |
/******************************************************************************
|
|
Packit Service |
50c9f2 |
*
|
|
Packit Service |
50c9f2 |
* Copyright (C) 1997-2015 by Dimitri van Heesch.
|
|
Packit Service |
50c9f2 |
*
|
|
Packit Service |
50c9f2 |
* Permission to use, copy, modify, and distribute this software and its
|
|
Packit Service |
50c9f2 |
* documentation under the terms of the GNU General Public License is hereby
|
|
Packit Service |
50c9f2 |
* granted. No representations are made about the suitability of this software
|
|
Packit Service |
50c9f2 |
* for any purpose. It is provided "as is" without express or implied warranty.
|
|
Packit Service |
50c9f2 |
* See the GNU General Public License for more details.
|
|
Packit Service |
50c9f2 |
*
|
|
Packit Service |
50c9f2 |
* Documents produced by Doxygen are derivative works derived from the
|
|
Packit Service |
50c9f2 |
* input used in their production; they are not affected by this license.
|
|
Packit Service |
50c9f2 |
*
|
|
Packit Service |
50c9f2 |
*/
|
|
Packit Service |
50c9f2 |
|
|
Packit Service |
50c9f2 |
#include "qcstring.h"
|
|
Packit Service |
50c9f2 |
#include "qgstring.h"
|
|
Packit Service |
50c9f2 |
|
|
Packit Service |
50c9f2 |
#include <qstring.h>
|
|
Packit Service |
50c9f2 |
#include <stdlib.h>
|
|
Packit Service |
50c9f2 |
#include <stdio.h>
|
|
Packit Service |
50c9f2 |
#include <stdarg.h>
|
|
Packit Service |
50c9f2 |
#include <ctype.h>
|
|
Packit Service |
50c9f2 |
#include <qregexp.h>
|
|
Packit Service |
50c9f2 |
#include <qdatastream.h>
|
|
Packit Service |
50c9f2 |
|
|
Packit Service |
50c9f2 |
QCString &QCString::sprintf( const char *format, ... )
|
|
Packit Service |
50c9f2 |
{
|
|
Packit Service |
50c9f2 |
va_list ap;
|
|
Packit Service |
50c9f2 |
va_start( ap, format );
|
|
Packit Service |
50c9f2 |
const int minlen=256;
|
|
Packit Service |
50c9f2 |
int l = length();
|
|
Packit Service |
50c9f2 |
if (l
|
|
Packit Service |
50c9f2 |
int n=vsnprintf( rawData(), l, format, ap);
|
|
Packit Service |
50c9f2 |
if (n<0) n=l;
|
|
Packit Service |
50c9f2 |
resize(n+1);
|
|
Packit Service |
50c9f2 |
va_end( ap );
|
|
Packit Service |
50c9f2 |
return *this;
|
|
Packit Service |
50c9f2 |
}
|
|
Packit Service |
50c9f2 |
|
|
Packit Service |
50c9f2 |
int QCString::find( char c, int index, bool cs ) const
|
|
Packit Service |
50c9f2 |
{
|
|
Packit Service |
50c9f2 |
if (index<0 || index>=(int)length()) return -1; // index outside string
|
|
Packit Service |
50c9f2 |
register const char *pos;
|
|
Packit Service |
50c9f2 |
if (cs)
|
|
Packit Service |
50c9f2 |
{
|
|
Packit Service |
50c9f2 |
pos = strchr(data()+index,c);
|
|
Packit Service |
50c9f2 |
}
|
|
Packit Service |
50c9f2 |
else
|
|
Packit Service |
50c9f2 |
{
|
|
Packit Service |
50c9f2 |
pos = data()+index;
|
|
Packit Service |
50c9f2 |
c = tolower((unsigned char)c);
|
|
Packit Service |
50c9f2 |
while (*pos && tolower((unsigned char)*pos)!=c) pos++;
|
|
Packit Service |
50c9f2 |
if (!*pos && c) pos=0; // not found
|
|
Packit Service |
50c9f2 |
}
|
|
Packit Service |
50c9f2 |
return pos ? (int)(pos - data()) : -1;
|
|
Packit Service |
50c9f2 |
}
|
|
Packit Service |
50c9f2 |
|
|
Packit Service |
50c9f2 |
int QCString::find( const char *str, int index, bool cs ) const
|
|
Packit Service |
50c9f2 |
{
|
|
Packit Service |
50c9f2 |
int l = length();
|
|
Packit Service |
50c9f2 |
if (index<0 || index>=l) return -1; // index outside string
|
|
Packit Service |
50c9f2 |
if (!str) return -1; // no string to search for
|
|
Packit Service |
50c9f2 |
if (!*str) return index; // empty string matching at index
|
|
Packit Service |
50c9f2 |
register const char *pos;
|
|
Packit Service |
50c9f2 |
if (cs) // case sensitive
|
|
Packit Service |
50c9f2 |
{
|
|
Packit Service |
50c9f2 |
pos = strstr(data()+index,str);
|
|
Packit Service |
50c9f2 |
}
|
|
Packit Service |
50c9f2 |
else // case insensitive
|
|
Packit Service |
50c9f2 |
{
|
|
Packit Service |
50c9f2 |
pos = data();
|
|
Packit Service |
50c9f2 |
int len = qstrlen(str);
|
|
Packit Service |
50c9f2 |
while (*pos)
|
|
Packit Service |
50c9f2 |
{
|
|
Packit Service |
50c9f2 |
if (qstrnicmp(pos,str,len)==0) break;
|
|
Packit Service |
50c9f2 |
pos++;
|
|
Packit Service |
50c9f2 |
}
|
|
Packit Service |
50c9f2 |
if (!*pos) pos = 0; // not found
|
|
Packit Service |
50c9f2 |
}
|
|
Packit Service |
50c9f2 |
return pos ? (int)(pos - data()) : -1;
|
|
Packit Service |
50c9f2 |
}
|
|
Packit Service |
50c9f2 |
|
|
Packit Service |
50c9f2 |
int QCString::find( const QCString &str, int index, bool cs ) const
|
|
Packit Service |
50c9f2 |
{
|
|
Packit Service |
50c9f2 |
return find(str.data(),index,cs);
|
|
Packit Service |
50c9f2 |
}
|
|
Packit Service |
50c9f2 |
|
|
Packit Service |
50c9f2 |
int QCString::find( const QRegExp &rx, int index ) const
|
|
Packit Service |
50c9f2 |
{
|
|
Packit Service |
50c9f2 |
QString d = QString::fromLatin1( data() );
|
|
Packit Service |
50c9f2 |
return d.find( rx, index );
|
|
Packit Service |
50c9f2 |
}
|
|
Packit Service |
50c9f2 |
|
|
Packit Service |
50c9f2 |
int QCString::findRev( char c, int index, bool cs) const
|
|
Packit Service |
50c9f2 |
{
|
|
Packit Service |
50c9f2 |
const char *b = data();
|
|
Packit Service |
50c9f2 |
const char *pos;
|
|
Packit Service |
50c9f2 |
int len = length();
|
|
Packit Service |
50c9f2 |
if (len==0) return -1; // empty string
|
|
Packit Service |
50c9f2 |
if (index<0) // start from end
|
|
Packit Service |
50c9f2 |
{
|
|
Packit Service |
50c9f2 |
if (cs)
|
|
Packit Service |
50c9f2 |
{
|
|
Packit Service |
50c9f2 |
pos = strrchr(b,c);
|
|
Packit Service |
50c9f2 |
return pos ? (int)(pos - b) : -1;
|
|
Packit Service |
50c9f2 |
}
|
|
Packit Service |
50c9f2 |
index=len;
|
|
Packit Service |
50c9f2 |
}
|
|
Packit Service |
50c9f2 |
else if (index>len) // bad index
|
|
Packit Service |
50c9f2 |
{
|
|
Packit Service |
50c9f2 |
return -1;
|
|
Packit Service |
50c9f2 |
}
|
|
Packit Service |
50c9f2 |
pos = b+index;
|
|
Packit Service |
50c9f2 |
if (cs)
|
|
Packit Service |
50c9f2 |
{
|
|
Packit Service |
50c9f2 |
while ( pos>=b && *pos!=c) pos--;
|
|
Packit Service |
50c9f2 |
}
|
|
Packit Service |
50c9f2 |
else
|
|
Packit Service |
50c9f2 |
{
|
|
Packit Service |
50c9f2 |
c = tolower((unsigned char)c);
|
|
Packit Service |
50c9f2 |
while ( pos>=b && tolower((unsigned char)*pos)!=c) pos--;
|
|
Packit Service |
50c9f2 |
}
|
|
Packit Service |
50c9f2 |
return pos>=b ? (int)(pos - b) : -1;
|
|
Packit Service |
50c9f2 |
}
|
|
Packit Service |
50c9f2 |
|
|
Packit Service |
50c9f2 |
int QCString::findRev( const char *str, int index, bool cs) const
|
|
Packit Service |
50c9f2 |
{
|
|
Packit Service |
50c9f2 |
int slen = qstrlen(str);
|
|
Packit Service |
50c9f2 |
int len = length();
|
|
Packit Service |
50c9f2 |
if (index<0) index = len-slen; // start from end
|
|
Packit Service |
50c9f2 |
else if (index>len) return -1; // bad index
|
|
Packit Service |
50c9f2 |
else if (index+slen>len) index=len-slen; // str would be too long
|
|
Packit Service |
50c9f2 |
if (index<0) return -1; // no match possible
|
|
Packit Service |
50c9f2 |
register const char *pos = data()+index;
|
|
Packit Service |
50c9f2 |
if (cs) // case sensitive
|
|
Packit Service |
50c9f2 |
{
|
|
Packit Service |
50c9f2 |
for (int i=index; i>=0; i--) if (qstrncmp(pos--,str,slen)==0) return i;
|
|
Packit Service |
50c9f2 |
}
|
|
Packit Service |
50c9f2 |
else // case insensitive
|
|
Packit Service |
50c9f2 |
{
|
|
Packit Service |
50c9f2 |
for (int i=index; i>=0; i--) if (qstrnicmp(pos,str,slen)==0) return i;
|
|
Packit Service |
50c9f2 |
}
|
|
Packit Service |
50c9f2 |
return -1;
|
|
Packit Service |
50c9f2 |
}
|
|
Packit Service |
50c9f2 |
|
|
Packit Service |
50c9f2 |
int QCString::findRev( const QRegExp &rx, int index ) const
|
|
Packit Service |
50c9f2 |
{
|
|
Packit Service |
50c9f2 |
QString d = QString::fromLatin1( data() );
|
|
Packit Service |
50c9f2 |
return d.findRev( rx, index );
|
|
Packit Service |
50c9f2 |
}
|
|
Packit Service |
50c9f2 |
|
|
Packit Service |
50c9f2 |
int QCString::contains( char c, bool cs ) const
|
|
Packit Service |
50c9f2 |
{
|
|
Packit Service |
50c9f2 |
if (length()==0) return 0;
|
|
Packit Service |
50c9f2 |
int count=0;
|
|
Packit Service |
50c9f2 |
const char *pos = data();
|
|
Packit Service |
50c9f2 |
if (cs)
|
|
Packit Service |
50c9f2 |
{
|
|
Packit Service |
50c9f2 |
while (*pos) if (*pos++ == c) count++;
|
|
Packit Service |
50c9f2 |
}
|
|
Packit Service |
50c9f2 |
else
|
|
Packit Service |
50c9f2 |
{
|
|
Packit Service |
50c9f2 |
c = tolower((unsigned char)c);
|
|
Packit Service |
50c9f2 |
while (*pos)
|
|
Packit Service |
50c9f2 |
{
|
|
Packit Service |
50c9f2 |
if (tolower((unsigned char)*pos)==c) count++;
|
|
Packit Service |
50c9f2 |
pos++;
|
|
Packit Service |
50c9f2 |
}
|
|
Packit Service |
50c9f2 |
}
|
|
Packit Service |
50c9f2 |
return count;
|
|
Packit Service |
50c9f2 |
}
|
|
Packit Service |
50c9f2 |
|
|
Packit Service |
50c9f2 |
int QCString::contains( const char *str, bool cs ) const
|
|
Packit Service |
50c9f2 |
{
|
|
Packit Service |
50c9f2 |
if (str==0 || length()==0) return 0;
|
|
Packit Service |
50c9f2 |
int count=0;
|
|
Packit Service |
50c9f2 |
const char *pos = data();
|
|
Packit Service |
50c9f2 |
int len = qstrlen(str);
|
|
Packit Service |
50c9f2 |
while (*pos)
|
|
Packit Service |
50c9f2 |
{
|
|
Packit Service |
50c9f2 |
if (cs)
|
|
Packit Service |
50c9f2 |
{
|
|
Packit Service |
50c9f2 |
if (qstrncmp(pos,str,len)==0) count++;
|
|
Packit Service |
50c9f2 |
}
|
|
Packit Service |
50c9f2 |
else
|
|
Packit Service |
50c9f2 |
{
|
|
Packit Service |
50c9f2 |
if (qstrnicmp(pos,str,len)==0) count++;
|
|
Packit Service |
50c9f2 |
}
|
|
Packit Service |
50c9f2 |
pos++;
|
|
Packit Service |
50c9f2 |
}
|
|
Packit Service |
50c9f2 |
return count;
|
|
Packit Service |
50c9f2 |
}
|
|
Packit Service |
50c9f2 |
|
|
Packit Service |
50c9f2 |
int QCString::contains( const QRegExp &rx ) const
|
|
Packit Service |
50c9f2 |
{
|
|
Packit Service |
50c9f2 |
QString d = QString::fromLatin1( data() );
|
|
Packit Service |
50c9f2 |
return d.contains( rx );
|
|
Packit Service |
50c9f2 |
}
|
|
Packit Service |
50c9f2 |
|
|
Packit Service |
50c9f2 |
bool QCString::stripPrefix(const char *prefix)
|
|
Packit Service |
50c9f2 |
{
|
|
Packit Service |
50c9f2 |
if (prefix==0 || length()==0) return FALSE;
|
|
Packit Service |
50c9f2 |
int len = qstrlen(prefix);
|
|
Packit Service |
50c9f2 |
if (qstrncmp(prefix,data(),len)==0)
|
|
Packit Service |
50c9f2 |
{
|
|
Packit Service |
50c9f2 |
m_rep=mid(len,length()-len).m_rep; // need to make a deep copy
|
|
Packit Service |
50c9f2 |
return TRUE;
|
|
Packit Service |
50c9f2 |
}
|
|
Packit Service |
50c9f2 |
return FALSE;
|
|
Packit Service |
50c9f2 |
}
|
|
Packit Service |
50c9f2 |
|
|
Packit Service |
50c9f2 |
QCString QCString::left( uint len ) const
|
|
Packit Service |
50c9f2 |
{
|
|
Packit Service |
50c9f2 |
if (isEmpty())
|
|
Packit Service |
50c9f2 |
{
|
|
Packit Service |
50c9f2 |
return QCString();
|
|
Packit Service |
50c9f2 |
}
|
|
Packit Service |
50c9f2 |
else if (len>=length())
|
|
Packit Service |
50c9f2 |
{
|
|
Packit Service |
50c9f2 |
return QCString(data());
|
|
Packit Service |
50c9f2 |
}
|
|
Packit Service |
50c9f2 |
else
|
|
Packit Service |
50c9f2 |
{
|
|
Packit Service |
50c9f2 |
QCString s( len+1 );
|
|
Packit Service |
50c9f2 |
memcpy( s.rawData(), data(), len);
|
|
Packit Service |
50c9f2 |
return s;
|
|
Packit Service |
50c9f2 |
}
|
|
Packit Service |
50c9f2 |
}
|
|
Packit Service |
50c9f2 |
|
|
Packit Service |
50c9f2 |
QCString QCString::right( uint len ) const
|
|
Packit Service |
50c9f2 |
{
|
|
Packit Service |
50c9f2 |
if (isEmpty())
|
|
Packit Service |
50c9f2 |
{
|
|
Packit Service |
50c9f2 |
return QCString();
|
|
Packit Service |
50c9f2 |
}
|
|
Packit Service |
50c9f2 |
else
|
|
Packit Service |
50c9f2 |
{
|
|
Packit Service |
50c9f2 |
int l = length();
|
|
Packit Service |
50c9f2 |
if ((int)len>l) len=l;
|
|
Packit Service |
50c9f2 |
const char *pos = data() + (l-len);
|
|
Packit Service |
50c9f2 |
return QCString(pos);
|
|
Packit Service |
50c9f2 |
}
|
|
Packit Service |
50c9f2 |
}
|
|
Packit Service |
50c9f2 |
|
|
Packit Service |
50c9f2 |
QCString QCString::mid( uint index, uint len) const
|
|
Packit Service |
50c9f2 |
{
|
|
Packit Service |
50c9f2 |
uint slen = (uint)length();
|
|
Packit Service |
50c9f2 |
if (len==0xffffffff) len = slen-index;
|
|
Packit Service |
50c9f2 |
if (isEmpty() || index>=slen || len==0)
|
|
Packit Service |
50c9f2 |
{
|
|
Packit Service |
50c9f2 |
return QCString();
|
|
Packit Service |
50c9f2 |
}
|
|
Packit Service |
50c9f2 |
else
|
|
Packit Service |
50c9f2 |
{
|
|
Packit Service |
50c9f2 |
register const char *p = data()+index;
|
|
Packit Service |
50c9f2 |
QCString s(len+1);
|
|
Packit Service |
50c9f2 |
qstrncpy( s.rawData(), p, len+1 );
|
|
Packit Service |
50c9f2 |
return s;
|
|
Packit Service |
50c9f2 |
}
|
|
Packit Service |
50c9f2 |
}
|
|
Packit Service |
50c9f2 |
|
|
Packit Service |
50c9f2 |
QCString QCString::lower() const
|
|
Packit Service |
50c9f2 |
{
|
|
Packit Service |
50c9f2 |
if (length()==0) return QCString();
|
|
Packit Service |
50c9f2 |
QCString s(data());
|
|
Packit Service |
50c9f2 |
register char *pos = s.rawData();
|
|
Packit Service |
50c9f2 |
if (pos)
|
|
Packit Service |
50c9f2 |
{
|
|
Packit Service |
50c9f2 |
while (*pos)
|
|
Packit Service |
50c9f2 |
{
|
|
Packit Service |
50c9f2 |
*pos = tolower((unsigned char)*pos);
|
|
Packit Service |
50c9f2 |
pos++;
|
|
Packit Service |
50c9f2 |
}
|
|
Packit Service |
50c9f2 |
}
|
|
Packit Service |
50c9f2 |
return s;
|
|
Packit Service |
50c9f2 |
}
|
|
Packit Service |
50c9f2 |
|
|
Packit Service |
50c9f2 |
QCString QCString::upper() const
|
|
Packit Service |
50c9f2 |
{
|
|
Packit Service |
50c9f2 |
if (length()==0) return QCString();
|
|
Packit Service |
50c9f2 |
QCString s(data());
|
|
Packit Service |
50c9f2 |
register char *pos = s.rawData();
|
|
Packit Service |
50c9f2 |
if (pos)
|
|
Packit Service |
50c9f2 |
{
|
|
Packit Service |
50c9f2 |
while (*pos)
|
|
Packit Service |
50c9f2 |
{
|
|
Packit Service |
50c9f2 |
*pos = toupper((unsigned char)*pos);
|
|
Packit Service |
50c9f2 |
pos++;
|
|
Packit Service |
50c9f2 |
}
|
|
Packit Service |
50c9f2 |
}
|
|
Packit Service |
50c9f2 |
return s;
|
|
Packit Service |
50c9f2 |
}
|
|
Packit Service |
50c9f2 |
|
|
Packit Service |
50c9f2 |
QCString QCString::stripWhiteSpace() const
|
|
Packit Service |
50c9f2 |
{
|
|
Packit Service |
50c9f2 |
if ( isEmpty() ) // nothing to do
|
|
Packit Service |
50c9f2 |
return *this;
|
|
Packit Service |
50c9f2 |
|
|
Packit Service |
50c9f2 |
register const char *cs = data();
|
|
Packit Service |
50c9f2 |
int reslen = length();
|
|
Packit Service |
50c9f2 |
if ( !isspace((uchar)cs[0]) && !isspace((uchar)cs[reslen-1]) )
|
|
Packit Service |
50c9f2 |
return *this; // returns a copy
|
|
Packit Service |
50c9f2 |
|
|
Packit Service |
50c9f2 |
QCString result(cs);
|
|
Packit Service |
50c9f2 |
register char *s = result.rawData();
|
|
Packit Service |
50c9f2 |
int start = 0;
|
|
Packit Service |
50c9f2 |
int end = reslen - 1;
|
|
Packit Service |
50c9f2 |
while ( isspace((uchar) s[start]) ) // skip white space from start
|
|
Packit Service |
50c9f2 |
start++;
|
|
Packit Service |
50c9f2 |
if ( s[start] == '\0' )
|
|
Packit Service |
50c9f2 |
{ // only white space
|
|
Packit Service |
50c9f2 |
return QCString();
|
|
Packit Service |
50c9f2 |
}
|
|
Packit Service |
50c9f2 |
while ( end && isspace((uchar) s[end]) ) // skip white space from end
|
|
Packit Service |
50c9f2 |
end--;
|
|
Packit Service |
50c9f2 |
end -= start - 1;
|
|
Packit Service |
50c9f2 |
qmemmove( s, &s[start], end );
|
|
Packit Service |
50c9f2 |
result.resize( end + 1 );
|
|
Packit Service |
50c9f2 |
return result;
|
|
Packit Service |
50c9f2 |
}
|
|
Packit Service |
50c9f2 |
|
|
Packit Service |
50c9f2 |
QCString QCString::simplifyWhiteSpace() const
|
|
Packit Service |
50c9f2 |
{
|
|
Packit Service |
50c9f2 |
if ( isEmpty() ) // nothing to do
|
|
Packit Service |
50c9f2 |
return *this;
|
|
Packit Service |
50c9f2 |
|
|
Packit Service |
50c9f2 |
QCString result( length()+1 );
|
|
Packit Service |
50c9f2 |
const char *from = data();
|
|
Packit Service |
50c9f2 |
char *to = result.rawData();
|
|
Packit Service |
50c9f2 |
char *first = to;
|
|
Packit Service |
50c9f2 |
while ( TRUE )
|
|
Packit Service |
50c9f2 |
{
|
|
Packit Service |
50c9f2 |
while ( *from && isspace((uchar) *from) )
|
|
Packit Service |
50c9f2 |
from++;
|
|
Packit Service |
50c9f2 |
while ( *from && !isspace((uchar)*from) )
|
|
Packit Service |
50c9f2 |
*to++ = *from++;
|
|
Packit Service |
50c9f2 |
if ( *from )
|
|
Packit Service |
50c9f2 |
*to++ = 0x20; // ' '
|
|
Packit Service |
50c9f2 |
else
|
|
Packit Service |
50c9f2 |
break;
|
|
Packit Service |
50c9f2 |
}
|
|
Packit Service |
50c9f2 |
if ( to > first && *(to-1) == 0x20 )
|
|
Packit Service |
50c9f2 |
to--;
|
|
Packit Service |
50c9f2 |
*to = '\0';
|
|
Packit Service |
50c9f2 |
result.resize( (int)((long)to - (long)result.data()) + 1 );
|
|
Packit Service |
50c9f2 |
return result;
|
|
Packit Service |
50c9f2 |
}
|
|
Packit Service |
50c9f2 |
|
|
Packit Service |
50c9f2 |
QCString &QCString::assign( const char *str )
|
|
Packit Service |
50c9f2 |
{
|
|
Packit Service |
50c9f2 |
return operator=(str);
|
|
Packit Service |
50c9f2 |
}
|
|
Packit Service |
50c9f2 |
|
|
Packit Service |
50c9f2 |
QCString &QCString::insert( uint index, const char *s )
|
|
Packit Service |
50c9f2 |
{
|
|
Packit Service |
50c9f2 |
int len = s ? qstrlen(s) : 0;
|
|
Packit Service |
50c9f2 |
if ( len == 0 ) return *this;
|
|
Packit Service |
50c9f2 |
int olen = length();
|
|
Packit Service |
50c9f2 |
int nlen = olen + len;
|
|
Packit Service |
50c9f2 |
if ((int)index>=olen)
|
|
Packit Service |
50c9f2 |
{
|
|
Packit Service |
50c9f2 |
resize(nlen+index-olen+1);
|
|
Packit Service |
50c9f2 |
memset(rawData()+olen, ' ', index-olen);
|
|
Packit Service |
50c9f2 |
memcpy(rawData()+index,s, len+1);
|
|
Packit Service |
50c9f2 |
}
|
|
Packit Service |
50c9f2 |
else
|
|
Packit Service |
50c9f2 |
{
|
|
Packit Service |
50c9f2 |
resize(nlen+1);
|
|
Packit Service |
50c9f2 |
qmemmove(rawData()+index+len,data()+index,olen-index+1);
|
|
Packit Service |
50c9f2 |
memcpy(rawData()+index,s,len);
|
|
Packit Service |
50c9f2 |
}
|
|
Packit Service |
50c9f2 |
return *this;
|
|
Packit Service |
50c9f2 |
}
|
|
Packit Service |
50c9f2 |
|
|
Packit Service |
50c9f2 |
QCString &QCString::insert( uint index, char c)
|
|
Packit Service |
50c9f2 |
{
|
|
Packit Service |
50c9f2 |
char buf[2];
|
|
Packit Service |
50c9f2 |
buf[0] = c;
|
|
Packit Service |
50c9f2 |
buf[1] = '\0';
|
|
Packit Service |
50c9f2 |
return insert( index, buf );
|
|
Packit Service |
50c9f2 |
}
|
|
Packit Service |
50c9f2 |
QCString &QCString::append( const char *s )
|
|
Packit Service |
50c9f2 |
{
|
|
Packit Service |
50c9f2 |
return operator+=(s);
|
|
Packit Service |
50c9f2 |
}
|
|
Packit Service |
50c9f2 |
QCString &QCString::prepend( const char *s )
|
|
Packit Service |
50c9f2 |
{
|
|
Packit Service |
50c9f2 |
return insert(0,s);
|
|
Packit Service |
50c9f2 |
}
|
|
Packit Service |
50c9f2 |
QCString &QCString::remove( uint index, uint len )
|
|
Packit Service |
50c9f2 |
{
|
|
Packit Service |
50c9f2 |
uint olen = length();
|
|
Packit Service |
50c9f2 |
if ( index + len >= olen ) // range problems
|
|
Packit Service |
50c9f2 |
{
|
|
Packit Service |
50c9f2 |
if ( index < olen ) // index ok
|
|
Packit Service |
50c9f2 |
{
|
|
Packit Service |
50c9f2 |
resize( index+1 );
|
|
Packit Service |
50c9f2 |
}
|
|
Packit Service |
50c9f2 |
}
|
|
Packit Service |
50c9f2 |
else if ( len != 0 )
|
|
Packit Service |
50c9f2 |
{
|
|
Packit Service |
50c9f2 |
QCString tmp(olen-index-len+1);
|
|
Packit Service |
50c9f2 |
qmemmove( tmp.rawData(), data()+index+len, olen-index-len+1 );
|
|
Packit Service |
50c9f2 |
resize( olen-len+1 );
|
|
Packit Service |
50c9f2 |
memcpy( rawData()+index,tmp.data(),tmp.length() );
|
|
Packit Service |
50c9f2 |
}
|
|
Packit Service |
50c9f2 |
return *this;
|
|
Packit Service |
50c9f2 |
}
|
|
Packit Service |
50c9f2 |
|
|
Packit Service |
50c9f2 |
QCString &QCString::replace( uint index, uint len, const char *s)
|
|
Packit Service |
50c9f2 |
{
|
|
Packit Service |
50c9f2 |
remove( index, len );
|
|
Packit Service |
50c9f2 |
insert( index, s );
|
|
Packit Service |
50c9f2 |
return *this;
|
|
Packit Service |
50c9f2 |
}
|
|
Packit Service |
50c9f2 |
|
|
Packit Service |
50c9f2 |
QCString &QCString::replace( const QRegExp &rx, const char *str )
|
|
Packit Service |
50c9f2 |
{
|
|
Packit Service |
50c9f2 |
QString d = QString::fromLatin1( data() );
|
|
Packit Service |
50c9f2 |
QString r = QString::fromLatin1( str );
|
|
Packit Service |
50c9f2 |
d.replace( rx, r );
|
|
Packit Service |
50c9f2 |
operator=( d.ascii() );
|
|
Packit Service |
50c9f2 |
return *this;
|
|
Packit Service |
50c9f2 |
}
|
|
Packit Service |
50c9f2 |
|
|
Packit Service |
50c9f2 |
short QCString::toShort(bool *ok) const
|
|
Packit Service |
50c9f2 |
{
|
|
Packit Service |
50c9f2 |
QString s(data());
|
|
Packit Service |
50c9f2 |
return s.toShort(ok);
|
|
Packit Service |
50c9f2 |
}
|
|
Packit Service |
50c9f2 |
|
|
Packit Service |
50c9f2 |
ushort QCString::toUShort(bool *ok) const
|
|
Packit Service |
50c9f2 |
{
|
|
Packit Service |
50c9f2 |
QString s(data());
|
|
Packit Service |
50c9f2 |
return s.toUShort(ok);
|
|
Packit Service |
50c9f2 |
}
|
|
Packit Service |
50c9f2 |
|
|
Packit Service |
50c9f2 |
int QCString::toInt(bool *ok) const
|
|
Packit Service |
50c9f2 |
{
|
|
Packit Service |
50c9f2 |
QString s(data());
|
|
Packit Service |
50c9f2 |
return s.toInt(ok);
|
|
Packit Service |
50c9f2 |
}
|
|
Packit Service |
50c9f2 |
|
|
Packit Service |
50c9f2 |
uint QCString::toUInt(bool *ok) const
|
|
Packit Service |
50c9f2 |
{
|
|
Packit Service |
50c9f2 |
QString s(data());
|
|
Packit Service |
50c9f2 |
return s.toUInt(ok);
|
|
Packit Service |
50c9f2 |
}
|
|
Packit Service |
50c9f2 |
|
|
Packit Service |
50c9f2 |
long QCString::toLong(bool *ok) const
|
|
Packit Service |
50c9f2 |
{
|
|
Packit Service |
50c9f2 |
QString s(data());
|
|
Packit Service |
50c9f2 |
return s.toLong(ok);
|
|
Packit Service |
50c9f2 |
}
|
|
Packit Service |
50c9f2 |
|
|
Packit Service |
50c9f2 |
ulong QCString::toULong(bool *ok) const
|
|
Packit Service |
50c9f2 |
{
|
|
Packit Service |
50c9f2 |
QString s(data());
|
|
Packit Service |
50c9f2 |
return s.toULong(ok);
|
|
Packit Service |
50c9f2 |
}
|
|
Packit Service |
50c9f2 |
|
|
Packit Service |
50c9f2 |
uint64 QCString::toUInt64(bool *ok) const
|
|
Packit Service |
50c9f2 |
{
|
|
Packit Service |
50c9f2 |
QString s(data());
|
|
Packit Service |
50c9f2 |
return s.toUInt64(ok);
|
|
Packit Service |
50c9f2 |
}
|
|
Packit Service |
50c9f2 |
|
|
Packit Service |
50c9f2 |
QCString &QCString::setNum(short n)
|
|
Packit Service |
50c9f2 |
{
|
|
Packit Service |
50c9f2 |
return setNum((long)n);
|
|
Packit Service |
50c9f2 |
}
|
|
Packit Service |
50c9f2 |
|
|
Packit Service |
50c9f2 |
QCString &QCString::setNum(ushort n)
|
|
Packit Service |
50c9f2 |
{
|
|
Packit Service |
50c9f2 |
return setNum((ulong)n);
|
|
Packit Service |
50c9f2 |
}
|
|
Packit Service |
50c9f2 |
|
|
Packit Service |
50c9f2 |
QCString &QCString::setNum(int n)
|
|
Packit Service |
50c9f2 |
{
|
|
Packit Service |
50c9f2 |
return setNum((long)n);
|
|
Packit Service |
50c9f2 |
}
|
|
Packit Service |
50c9f2 |
|
|
Packit Service |
50c9f2 |
QCString &QCString::setNum(uint n)
|
|
Packit Service |
50c9f2 |
{
|
|
Packit Service |
50c9f2 |
return setNum((ulong)n);
|
|
Packit Service |
50c9f2 |
}
|
|
Packit Service |
50c9f2 |
|
|
Packit Service |
50c9f2 |
QCString &QCString::setNum(long n)
|
|
Packit Service |
50c9f2 |
{
|
|
Packit Service |
50c9f2 |
char buf[20];
|
|
Packit Service |
50c9f2 |
register char *p = &buf[19];
|
|
Packit Service |
50c9f2 |
bool neg;
|
|
Packit Service |
50c9f2 |
if ( n < 0 )
|
|
Packit Service |
50c9f2 |
{
|
|
Packit Service |
50c9f2 |
neg = TRUE;
|
|
Packit Service |
50c9f2 |
n = -n;
|
|
Packit Service |
50c9f2 |
}
|
|
Packit Service |
50c9f2 |
else
|
|
Packit Service |
50c9f2 |
{
|
|
Packit Service |
50c9f2 |
neg = FALSE;
|
|
Packit Service |
50c9f2 |
}
|
|
Packit Service |
50c9f2 |
*p = '\0';
|
|
Packit Service |
50c9f2 |
do
|
|
Packit Service |
50c9f2 |
{
|
|
Packit Service |
50c9f2 |
*--p = ((int)(n%10)) + '0';
|
|
Packit Service |
50c9f2 |
n /= 10;
|
|
Packit Service |
50c9f2 |
} while ( n );
|
|
Packit Service |
50c9f2 |
if ( neg ) *--p = '-';
|
|
Packit Service |
50c9f2 |
operator=( p );
|
|
Packit Service |
50c9f2 |
return *this;
|
|
Packit Service |
50c9f2 |
}
|
|
Packit Service |
50c9f2 |
|
|
Packit Service |
50c9f2 |
QCString &QCString::setNum( ulong n)
|
|
Packit Service |
50c9f2 |
{
|
|
Packit Service |
50c9f2 |
char buf[20];
|
|
Packit Service |
50c9f2 |
register char *p = &buf[19];
|
|
Packit Service |
50c9f2 |
*p = '\0';
|
|
Packit Service |
50c9f2 |
do
|
|
Packit Service |
50c9f2 |
{
|
|
Packit Service |
50c9f2 |
*--p = ((int)(n%10)) + '0';
|
|
Packit Service |
50c9f2 |
n /= 10;
|
|
Packit Service |
50c9f2 |
} while ( n );
|
|
Packit Service |
50c9f2 |
operator=( p );
|
|
Packit Service |
50c9f2 |
return *this;
|
|
Packit Service |
50c9f2 |
}
|
|
Packit Service |
50c9f2 |
|
|
Packit Service |
50c9f2 |
//-------------------------------------------------
|
|
Packit Service |
50c9f2 |
|
|
Packit Service |
50c9f2 |
void *qmemmove( void *dst, const void *src, uint len )
|
|
Packit Service |
50c9f2 |
{
|
|
Packit Service |
50c9f2 |
register char *d;
|
|
Packit Service |
50c9f2 |
register char *s;
|
|
Packit Service |
50c9f2 |
if ( dst > src ) {
|
|
Packit Service |
50c9f2 |
d = (char *)dst + len - 1;
|
|
Packit Service |
50c9f2 |
s = (char *)src + len - 1;
|
|
Packit Service |
50c9f2 |
while ( len-- )
|
|
Packit Service |
50c9f2 |
*d-- = *s--;
|
|
Packit Service |
50c9f2 |
} else if ( dst < src ) {
|
|
Packit Service |
50c9f2 |
d = (char *)dst;
|
|
Packit Service |
50c9f2 |
s = (char *)src;
|
|
Packit Service |
50c9f2 |
while ( len-- )
|
|
Packit Service |
50c9f2 |
*d++ = *s++;
|
|
Packit Service |
50c9f2 |
}
|
|
Packit Service |
50c9f2 |
return dst;
|
|
Packit Service |
50c9f2 |
}
|
|
Packit Service |
50c9f2 |
|
|
Packit Service |
50c9f2 |
char *qstrdup( const char *str )
|
|
Packit Service |
50c9f2 |
{
|
|
Packit Service |
50c9f2 |
if ( !str )
|
|
Packit Service |
50c9f2 |
return 0;
|
|
Packit Service |
50c9f2 |
char *dst = new char[qstrlen(str)+1];
|
|
Packit Service |
50c9f2 |
CHECK_PTR( dst );
|
|
Packit Service |
50c9f2 |
return strcpy( dst, str );
|
|
Packit Service |
50c9f2 |
}
|
|
Packit Service |
50c9f2 |
|
|
Packit Service |
50c9f2 |
char *qstrncpy( char *dst, const char *src, uint len )
|
|
Packit Service |
50c9f2 |
{
|
|
Packit Service |
50c9f2 |
if ( !src )
|
|
Packit Service |
50c9f2 |
return 0;
|
|
Packit Service |
50c9f2 |
strncpy( dst, src, len );
|
|
Packit Service |
50c9f2 |
if ( len > 0 )
|
|
Packit Service |
50c9f2 |
dst[len-1] = '\0';
|
|
Packit Service |
50c9f2 |
return dst;
|
|
Packit Service |
50c9f2 |
}
|
|
Packit Service |
50c9f2 |
|
|
Packit Service |
50c9f2 |
int qstricmp( const char *str1, const char *str2 )
|
|
Packit Service |
50c9f2 |
{
|
|
Packit Service |
50c9f2 |
register const uchar *s1 = (const uchar *)str1;
|
|
Packit Service |
50c9f2 |
register const uchar *s2 = (const uchar *)str2;
|
|
Packit Service |
50c9f2 |
int res;
|
|
Packit Service |
50c9f2 |
uchar c;
|
|
Packit Service |
50c9f2 |
if ( !s1 || !s2 )
|
|
Packit Service |
50c9f2 |
return s1 == s2 ? 0 : (int)((long)s2 - (long)s1);
|
|
Packit Service |
50c9f2 |
for ( ; !(res = (c=tolower(*s1)) - tolower(*s2)); s1++, s2++ )
|
|
Packit Service |
50c9f2 |
if ( !c ) // strings are equal
|
|
Packit Service |
50c9f2 |
break;
|
|
Packit Service |
50c9f2 |
return res;
|
|
Packit Service |
50c9f2 |
}
|
|
Packit Service |
50c9f2 |
|
|
Packit Service |
50c9f2 |
int qstrnicmp( const char *str1, const char *str2, uint len )
|
|
Packit Service |
50c9f2 |
{
|
|
Packit Service |
50c9f2 |
register const uchar *s1 = (const uchar *)str1;
|
|
Packit Service |
50c9f2 |
register const uchar *s2 = (const uchar *)str2;
|
|
Packit Service |
50c9f2 |
int res;
|
|
Packit Service |
50c9f2 |
uchar c;
|
|
Packit Service |
50c9f2 |
if ( !s1 || !s2 )
|
|
Packit Service |
50c9f2 |
return (int)((long)s2 - (long)s1);
|
|
Packit Service |
50c9f2 |
for ( ; len--; s1++, s2++ ) {
|
|
Packit Service |
50c9f2 |
if ( (res = (c=tolower(*s1)) - tolower(*s2)) )
|
|
Packit Service |
50c9f2 |
return res;
|
|
Packit Service |
50c9f2 |
if ( !c ) // strings are equal
|
|
Packit Service |
50c9f2 |
break;
|
|
Packit Service |
50c9f2 |
}
|
|
Packit Service |
50c9f2 |
return 0;
|
|
Packit Service |
50c9f2 |
}
|
|
Packit Service |
50c9f2 |
|
|
Packit Service |
50c9f2 |
#ifndef QT_NO_DATASTREAM
|
|
Packit Service |
50c9f2 |
|
|
Packit Service |
50c9f2 |
QDataStream &operator<<( QDataStream &s, const QByteArray &a )
|
|
Packit Service |
50c9f2 |
{
|
|
Packit Service |
50c9f2 |
return s.writeBytes( a.data(), a.size() );
|
|
Packit Service |
50c9f2 |
}
|
|
Packit Service |
50c9f2 |
|
|
Packit Service |
50c9f2 |
QDataStream &operator>>( QDataStream &s, QByteArray &a )
|
|
Packit Service |
50c9f2 |
{
|
|
Packit Service |
50c9f2 |
Q_UINT32 len;
|
|
Packit Service |
50c9f2 |
s >> len; // read size of array
|
|
Packit Service |
50c9f2 |
if ( len == 0 || s.eof() ) { // end of file reached
|
|
Packit Service |
50c9f2 |
a.resize( 0 );
|
|
Packit Service |
50c9f2 |
return s;
|
|
Packit Service |
50c9f2 |
}
|
|
Packit Service |
50c9f2 |
if ( !a.resize( (uint)len ) ) { // resize array
|
|
Packit Service |
50c9f2 |
#if defined(CHECK_NULL)
|
|
Packit Service |
50c9f2 |
qWarning( "QDataStream: Not enough memory to read QByteArray" );
|
|
Packit Service |
50c9f2 |
#endif
|
|
Packit Service |
50c9f2 |
len = 0;
|
|
Packit Service |
50c9f2 |
}
|
|
Packit Service |
50c9f2 |
if ( len > 0 ) // not null array
|
|
Packit Service |
50c9f2 |
s.readRawBytes( a.data(), (uint)len );
|
|
Packit Service |
50c9f2 |
return s;
|
|
Packit Service |
50c9f2 |
}
|
|
Packit Service |
50c9f2 |
|
|
Packit Service |
50c9f2 |
QDataStream &operator<<( QDataStream &s, const QCString &str )
|
|
Packit Service |
50c9f2 |
{
|
|
Packit Service |
50c9f2 |
return s.writeBytes( str.data(), str.size() );
|
|
Packit Service |
50c9f2 |
}
|
|
Packit Service |
50c9f2 |
|
|
Packit Service |
50c9f2 |
QDataStream &operator>>( QDataStream &s, QCString &str )
|
|
Packit Service |
50c9f2 |
{
|
|
Packit Service |
50c9f2 |
Q_UINT32 len;
|
|
Packit Service |
50c9f2 |
s >> len; // read size of string
|
|
Packit Service |
50c9f2 |
if ( len == 0 || s.eof() ) { // end of file reached
|
|
Packit Service |
50c9f2 |
str.resize( 0 );
|
|
Packit Service |
50c9f2 |
return s;
|
|
Packit Service |
50c9f2 |
}
|
|
Packit Service |
50c9f2 |
if ( !str.resize( (uint)len )) {// resize string
|
|
Packit Service |
50c9f2 |
#if defined(CHECK_NULL)
|
|
Packit Service |
50c9f2 |
qWarning( "QDataStream: Not enough memory to read QCString" );
|
|
Packit Service |
50c9f2 |
#endif
|
|
Packit Service |
50c9f2 |
len = 0;
|
|
Packit Service |
50c9f2 |
}
|
|
Packit Service |
50c9f2 |
if ( len > 0 ) // not null array
|
|
Packit Service |
50c9f2 |
s.readRawBytes( str.rawData(), (uint)len );
|
|
Packit Service |
50c9f2 |
return s;
|
|
Packit Service |
50c9f2 |
}
|
|
Packit Service |
50c9f2 |
|
|
Packit Service |
50c9f2 |
#endif //QT_NO_DATASTREAM
|
|
Packit Service |
50c9f2 |
|
|
Packit Service |
50c9f2 |
inline QCString operator+( const QCString &s1, const QGString &s2 )
|
|
Packit Service |
50c9f2 |
{
|
|
Packit Service |
50c9f2 |
QCString tmp(s1);
|
|
Packit Service |
50c9f2 |
tmp += s2.data();
|
|
Packit Service |
50c9f2 |
return tmp;
|
|
Packit Service |
50c9f2 |
}
|
|
Packit Service |
50c9f2 |
|
|
Packit Service |
50c9f2 |
inline QCString operator+( const QGString &s1, const QCString &s2 )
|
|
Packit Service |
50c9f2 |
{
|
|
Packit Service |
50c9f2 |
QCString tmp(s1.data());
|
|
Packit Service |
50c9f2 |
tmp += s2;
|
|
Packit Service |
50c9f2 |
return tmp;
|
|
Packit Service |
50c9f2 |
}
|
|
Packit Service |
50c9f2 |
|