mirror of
https://bitbucket.org/smil3y/katie.git
synced 2025-02-23 18:32:55 +00:00
replace qbytearray_insert() function with its body and de-duplicate code
Signed-off-by: Ivailo Monev <xakepa10@gmail.com>
This commit is contained in:
parent
e1c257e698
commit
806043ae3d
1 changed files with 22 additions and 42 deletions
|
@ -1504,30 +1504,6 @@ QByteArray& QByteArray::append(char ch)
|
|||
return *this;
|
||||
}
|
||||
|
||||
/*!
|
||||
\internal
|
||||
Inserts \a len bytes from the array \a arr at position \a pos and returns a
|
||||
reference the modified byte array.
|
||||
*/
|
||||
static inline QByteArray &qbytearray_insert(QByteArray *ba,
|
||||
int pos, const char *arr, int len)
|
||||
{
|
||||
Q_ASSERT(pos >= 0);
|
||||
|
||||
if (pos < 0 || len <= 0 || arr == 0)
|
||||
return *ba;
|
||||
|
||||
int oldsize = ba->size();
|
||||
ba->resize(qMax(pos, oldsize) + len);
|
||||
char *dst = ba->data();
|
||||
if (pos > oldsize)
|
||||
::memset(dst + oldsize, 0x20, pos - oldsize);
|
||||
else
|
||||
::memmove(dst + pos + len, dst + pos, oldsize - pos);
|
||||
memcpy(dst + pos, arr, len);
|
||||
return *ba;
|
||||
}
|
||||
|
||||
/*!
|
||||
Inserts the byte array \a ba at index position \a i and returns a
|
||||
reference to this byte array.
|
||||
|
@ -1540,7 +1516,7 @@ static inline QByteArray &qbytearray_insert(QByteArray *ba,
|
|||
|
||||
QByteArray &QByteArray::insert(int i, const QByteArray &ba)
|
||||
{
|
||||
return qbytearray_insert(this, i, ba.d->data, ba.d->size);
|
||||
return insert(i, ba.d->data, ba.d->size);
|
||||
}
|
||||
|
||||
/*!
|
||||
|
@ -1574,7 +1550,7 @@ QByteArray &QByteArray::insert(int i, const QByteArray &ba)
|
|||
|
||||
QByteArray &QByteArray::insert(int i, const char *str)
|
||||
{
|
||||
return qbytearray_insert(this, i, str, qstrlen(str));
|
||||
return insert(i, str, qstrlen(str));
|
||||
}
|
||||
|
||||
/*!
|
||||
|
@ -1590,7 +1566,20 @@ QByteArray &QByteArray::insert(int i, const char *str)
|
|||
|
||||
QByteArray &QByteArray::insert(int i, const char *str, int len)
|
||||
{
|
||||
return qbytearray_insert(this, i, str, len);
|
||||
Q_ASSERT(i >= 0);
|
||||
if (i < 0 || len <= 0 || !str) {
|
||||
return *this;
|
||||
}
|
||||
int oldsize = d->size;
|
||||
resize(qMax(i, oldsize) + len);
|
||||
char *dst = this->data();
|
||||
if (i > oldsize) {
|
||||
::memset(dst + oldsize, 0x20, i - oldsize);
|
||||
} else {
|
||||
::memmove(dst + i + len, dst + i, oldsize - i);
|
||||
}
|
||||
::memcpy(dst + i, str, len);
|
||||
return *this;
|
||||
}
|
||||
|
||||
/*!
|
||||
|
@ -1603,7 +1592,7 @@ QByteArray &QByteArray::insert(int i, const char *str, int len)
|
|||
|
||||
QByteArray &QByteArray::insert(int i, char ch)
|
||||
{
|
||||
return qbytearray_insert(this, i, &ch, 1);
|
||||
return insert(i, &ch, 1);
|
||||
}
|
||||
|
||||
/*!
|
||||
|
@ -1646,15 +1635,7 @@ QByteArray &QByteArray::remove(int pos, int len)
|
|||
|
||||
QByteArray &QByteArray::replace(int pos, int len, const QByteArray &after)
|
||||
{
|
||||
if (len == after.d->size && (pos + len <= d->size)) {
|
||||
detach();
|
||||
memmove(d->data + pos, after.d->data, len*sizeof(char));
|
||||
return *this;
|
||||
} else {
|
||||
// ### optimize me
|
||||
remove(pos, len);
|
||||
return insert(pos, after);
|
||||
}
|
||||
return replace(pos, len, after.constData(), after.size());
|
||||
}
|
||||
|
||||
/*! \fn QByteArray &QByteArray::replace(int pos, int len, const char *after)
|
||||
|
@ -1686,10 +1667,9 @@ QByteArray &QByteArray::replace(int pos, int len, const char *after, int alen)
|
|||
detach();
|
||||
memcpy(d->data + pos, after, len*sizeof(char));
|
||||
return *this;
|
||||
} else {
|
||||
remove(pos, len);
|
||||
return qbytearray_insert(this, pos, after, alen);
|
||||
}
|
||||
remove(pos, len);
|
||||
return insert(pos, after, alen);
|
||||
}
|
||||
|
||||
// ### optimize all other replace method, by offering
|
||||
|
@ -1707,9 +1687,9 @@ QByteArray &QByteArray::replace(int pos, int len, const char *after, int alen)
|
|||
|
||||
QByteArray &QByteArray::replace(const QByteArray &before, const QByteArray &after)
|
||||
{
|
||||
if (isNull() || before.d == after.d)
|
||||
if (isNull() || before.d == after.d) {
|
||||
return *this;
|
||||
|
||||
}
|
||||
return replace(before.constData(), before.size(), after.constData(), after.size());
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue