⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 kwqstring.cpp

📁 khtml在gtk上的移植版本
💻 CPP
📖 第 1 页 / 共 5 页
字号:
            guint lc = g_unichar_tolower(c.unicode());            while (n--) {                count += g_unichar_tolower(uc->unicode()) == lc;                uc++;            }        }    }     return count;}int QString::contains(char ch) const{    return contains(QChar(ch), true);}int QString::contains(const char *str, bool caseSensitive) const{    if (!str)        return 0;    int len = strlen(str);    char c = *str;    KWQStringData *data = *dataHandle;    int n = data->_length;    n -= len - 1;    if (n <= 0)        return 0;    int count = 0;    if (data->_isAsciiValid) {        const char *p = data->_ascii;        if (caseSensitive) {            do {                count += *p == c && memcmp(p + 1, str + 1, len - 1) == 0;                p++;            } while (--n);        } else {            guint lc = g_unichar_tolower(c);            do {                count += g_unichar_tolower(*p) == lc && equalCaseInsensitive(p + 1, str + 1, len - 1);                p++;            } while (--n);        }    } else {        ASSERT(data->_isUnicodeValid);        const QChar *p = data->_unicode;        if (caseSensitive) {            do {                count += *p == c && equal(p + 1, str + 1, len - 1);                p++;            } while (--n);        } else {            guint lc = g_unichar_tolower(c);            do {                count += g_unichar_tolower(p->unicode()) == lc && equalCaseInsensitive(p + 1, str + 1, len - 1);                p++;            } while (--n);        }    }    return count;}int QString::contains(const QString &str, bool caseSensitive) const{    if (str.isEmpty())        return 0;    const QChar *strP = str.unicode();    int len = str.dataHandle[0]->_length;    QChar c = *strP;    const QChar *p = unicode();    int n = dataHandle[0]->_length;    n -= len - 1;    if (n <= 0)        return 0;    int count = 0;    if (caseSensitive) {        int byteCount = len * sizeof(QChar);        do {            count += *p == c && memcmp(p, strP, byteCount) == 0;            ++p;        } while (--n);    } else {        do {            count += p->lower() == c && equalCaseInsensitive(p, strP, len) == 0;            ++p;        } while (--n);    }    return count;}bool QString::isAllASCII() const{    KWQStringData *data = *dataHandle;    int n = data->_length;    if (data->_isAsciiValid) {        const char *p = data->_ascii;        while (n--) {            unsigned char c = *p++;            if (c > 0x7F) {                return false;            }        }    } else {        ASSERT(data->_isUnicodeValid);        const QChar *p = data->_unicode;        while (n--) {            if ((*p++).unicode() > 0x7F) {                return false;            }        }    }    return true;}bool QString::isAllLatin1() const{    KWQStringData *data = *dataHandle;    if (data->_isAsciiValid) {        return true;    }    ASSERT(data->_isUnicodeValid);    int n = data->_length;    const QChar *p = data->_unicode;    while (n--) {        if ((*p++).unicode() > 0xFF) {            return false;        }    }    return true;}bool QString::hasFastLatin1() const{    KWQStringData *data = *dataHandle;    return data->_isAsciiValid;}void QString::copyLatin1(char *buffer, uint position, uint maxLength) const{    KWQStringData *data = *dataHandle;    int length = data->_length;    if (position > static_cast<uint>(length))        length = 0;    else        length -= position;    if (static_cast<uint>(length) > maxLength)        length = static_cast<int>(maxLength);    buffer[length] = 0;    if (data->_isAsciiValid) {        memcpy(buffer, data->_ascii + position, length);        return;    }    ASSERT(data->_isUnicodeValid);    const QChar *uc = data->_unicode + position;    while (length--)        *buffer++ = *uc++;}short QString::toShort(bool *ok, int base) const{    long v = toLong( ok, base );    if ( ok && *ok && (v < -32768 || v > 32767) ) {	*ok = FALSE;	v = 0;    }    return (short)v;}ushort QString::toUShort(bool *ok, int base) const{    ulong v = toULong( ok, base );    if ( ok && *ok && (v > 65535) ) {	*ok = FALSE;	v = 0;    }    return (ushort)v;}int QString::toInt(bool *ok, int base) const{    return (int)toLong( ok, base );}uint QString::toUInt(bool *ok, int base) const{    return (uint)toULong( ok, base );}long QString::toLong(bool *ok, int base) const{    const QChar *p = unicode();    long val=0;    int l = dataHandle[0]->_length;    const long max_mult = LONG_MAX / base;    bool is_ok = FALSE;    int neg = 0;    if ( !p )	goto bye;    while ( l && p->isSpace() )			// skip leading space	l--,p++;    if ( l && *p == '-' ) {	l--;	p++;	neg = 1;    } else if ( *p == '+' ) {	l--;	p++;    }    // NOTE: toULong() code is similar    if ( !l || !ok_in_base(*p,base) )	goto bye;    while ( l && ok_in_base(*p,base) ) {	l--;	int dv;        int c = p->unicode();	if ( g_unichar_isdigit(c) ) {	    dv = c - '0';	} else {	    if ( c >= 'a' )		dv = c - 'a' + 10;	    else		dv = c - 'A' + 10;	}	if ( val > max_mult || (val == max_mult && dv > (LONG_MAX % base)+neg) )	    goto bye;	val = base*val + dv;	p++;    }    if ( neg )	val = -val;    while ( l && p->isSpace() )			// skip trailing space	l--,p++;    if ( !l )	is_ok = TRUE;bye:    if ( ok )	*ok = is_ok;    return is_ok ? val : 0;}ulong QString::toULong(bool *ok, int base) const{    const QChar *p = unicode();    ulong val=0;    int l = dataHandle[0]->_length;    const ulong max_mult = ULONG_MAX / base;    bool is_ok = FALSE;    if ( !p )	goto bye;    while ( l && p->isSpace() )			// skip leading space	l--,p++;    if ( *p == '+' )	l--,p++;    // NOTE: toLong() code is similar    if ( !l || !ok_in_base(*p,base) )	goto bye;    while ( l && ok_in_base(*p,base) ) {	l--;	uint dv;        int c = p->unicode();	if ( g_unichar_isdigit(c) ) {	    dv = c - '0';	} else {	    if ( c >= 'a' )		dv = c - 'a' + 10;	    else		dv = c - 'A' + 10;	}	if ( val > max_mult || (val == max_mult && dv > (ULONG_MAX % base)) )	    goto bye;	val = base*val + dv;	p++;    }    while ( l && p->isSpace() )			// skip trailing space	l--,p++;    if ( !l )	is_ok = TRUE;bye:    if ( ok )	*ok = is_ok;    return is_ok ? val : 0;}double QString::toDouble(bool *ok) const{    if (isEmpty()) {        if (ok)            *ok = false;        return 0;    }    const char *s = latin1();    char *end;    double val = kjs_strtod(s, &end);    if (ok)	*ok = end == NULL || *end == '\0';    return val;}bool QString::findArg(int& pos, int& len) const{    char lowest=0;    for (uint i = 0; i< dataHandle[0]->_length; i++) {	if ( at(i) == '%' && i + 1 < dataHandle[0]->_length ) {	    char dig = at(i+1);	    if ( dig >= '0' && dig <= '9' ) {		if ( !lowest || dig < lowest ) {		    lowest = dig;		    pos = i;		    len = 2;		}	    }	}    }    return lowest != 0;}QString QString::arg(const QString &a, int fieldwidth) const{    int pos, len;    QString r = *this;    if ( !findArg( pos, len ) ) {	qWarning( "QString::arg(): Argument missing: %s, %s",		  latin1(), a.latin1() );	// Make sure the text at least appears SOMEWHERE	r += ' ';	pos = r.dataHandle[0]->_length;	len = 0;    }    r.replace( pos, len, a );    if ( fieldwidth < 0 ) {	QString s;	while ( (uint)-fieldwidth > a.dataHandle[0]->_length ) {	    s += ' ';	    fieldwidth++;	}	r.insert( pos + a.dataHandle[0]->_length, s );    } else if ( fieldwidth ) {	QString s;	while ( (uint)fieldwidth > a.dataHandle[0]->_length ) {	    s += ' ';	    fieldwidth--;	}	r.insert( pos, s );    }    return r;}QString QString::arg(short replacement, int width) const{    return arg(number((int)replacement), width);}QString QString::arg(ushort replacement, int width) const{    return arg(number((uint)replacement), width);}QString QString::arg(int replacement, int width) const{    return arg(number(replacement), width);}QString QString::arg(uint replacement, int width) const{    return arg(number(replacement), width);}QString QString::arg(long replacement, int width) const{    return arg(number(replacement), width);}QString QString::arg(ulong replacement, int width) const{    return arg(number(replacement), width);}QString QString::arg(double replacement, int width) const{    return arg(number(replacement), width);}QString QString::left(uint len) const{ return mid(0, len); }QString QString::right(uint len) const{ return mid(length() - len, len); }QString QString::mid(uint start, uint len) const{    if( dataHandle && *dataHandle)    {        KWQStringData &data = **dataHandle;                if (data._length == 0)            return QString();                    // clip length        if( len > data._length - start )            len = data._length - start;        if ( index == 0 && len == data._length )            return *this;        ASSERT( start+len<=data._length );	// range check                // ascii case        if( data._isAsciiValid && data._ascii )            return QString( &(data._ascii[start]) , len);                // unicode case        else if( data._isUnicodeValid && data._unicode )            return QString( &(data._unicode[start]), len );    }        // degenerate case    return QString();}QString QString::copy() const{    // does not need to be a deep copy    return QString(*this);}QString QString::lower() const{    QString s(*this);    KWQStringData *d = *s.dataHandle;    int l = d->_length;    if (l) {        bool detached = false;        if (d->_isAsciiValid) {            char *p = d->_ascii;            while (l--) {                char c = *p;                // FIXME: Doesn't work for 0x80-0xFF.                if (c >= 'A' && c <= 'Z') {                    if (!detached) {                        s.detach();                        d = *s.dataHandle;                        p = d->_ascii + d->_length - l - 1;                        detached = true;                    }                    *p = c + ('a' - 'A');                }                p++;            }        }        else {            ASSERT(d->_isUnicodeValid);            QChar *p = d->_unicode;            while (l--) {                QChar c = *p;                // FIXME: Doesn't work for 0x80-0xFF.                if (IS_ASCII_QCHAR(c)) {                    if (c >= 'A' && c <= 'Z') {                        if (!detached) {                            s.detach();                            d = *s.dataHandle;                            p = d->_unicode + d->_length - l - 1;                            detached = true;                        }                        *p = c + ('a' - 'A');                    }                } else {                    QChar clower = c.lower();                    if (clower != c) {                        if (!detached) {                            s.detach();                            d = *s.dataHandle;                            p = d->_unicode + d->_length - l - 1;                            detached = true;                        }                        *p = clower;                    }                }                p++;            }        }    }    return s;}QString QString::stripWhiteSpace() const

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -