Improve the UTF-16 and UTF-32 codecs with <qendian.h>
This is just the low-hanging fruit. Those algorithms could be much further improved, but they are so seldom-used that it's not worth it. Change-Id: I6a540578e810472bb455fffd15332b2a7a1ac901 Reviewed-by: Allan Sandfeld Jensen <allan.jensen@qt.io>
This commit is contained in:
parent
d0427759c6
commit
e79b56e504
@ -756,26 +756,16 @@ QByteArray QUtf16::convertFromUnicode(const QChar *uc, int len, QTextCodec::Conv
|
|||||||
char *data = d.data();
|
char *data = d.data();
|
||||||
if (!state || !(state->flags & QTextCodec::IgnoreHeader)) {
|
if (!state || !(state->flags & QTextCodec::IgnoreHeader)) {
|
||||||
QChar bom(QChar::ByteOrderMark);
|
QChar bom(QChar::ByteOrderMark);
|
||||||
if (endian == BigEndianness) {
|
if (endian == BigEndianness)
|
||||||
data[0] = bom.row();
|
qToBigEndian(bom.unicode(), data);
|
||||||
data[1] = bom.cell();
|
else
|
||||||
} else {
|
qToLittleEndian(bom.unicode(), data);
|
||||||
data[0] = bom.cell();
|
|
||||||
data[1] = bom.row();
|
|
||||||
}
|
|
||||||
data += 2;
|
data += 2;
|
||||||
}
|
}
|
||||||
if (endian == BigEndianness) {
|
if (endian == BigEndianness)
|
||||||
for (int i = 0; i < len; ++i) {
|
qToBigEndian<ushort>(uc, len, data);
|
||||||
*(data++) = uc[i].row();
|
else
|
||||||
*(data++) = uc[i].cell();
|
qToLittleEndian<ushort>(uc, len, data);
|
||||||
}
|
|
||||||
} else {
|
|
||||||
for (int i = 0; i < len; ++i) {
|
|
||||||
*(data++) = uc[i].cell();
|
|
||||||
*(data++) = uc[i].row();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (state) {
|
if (state) {
|
||||||
state->remainingChars = 0;
|
state->remainingChars = 0;
|
||||||
@ -891,20 +881,14 @@ QByteArray QUtf32::convertFromUnicode(const QChar *uc, int len, QTextCodec::Conv
|
|||||||
if (endian == BigEndianness) {
|
if (endian == BigEndianness) {
|
||||||
while (i.hasNext()) {
|
while (i.hasNext()) {
|
||||||
uint cp = i.next();
|
uint cp = i.next();
|
||||||
|
qToBigEndian(cp, data);
|
||||||
*(data++) = cp >> 24;
|
data += 4;
|
||||||
*(data++) = (cp >> 16) & 0xff;
|
|
||||||
*(data++) = (cp >> 8) & 0xff;
|
|
||||||
*(data++) = cp & 0xff;
|
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
while (i.hasNext()) {
|
while (i.hasNext()) {
|
||||||
uint cp = i.next();
|
uint cp = i.next();
|
||||||
|
qToLittleEndian(cp, data);
|
||||||
*(data++) = cp & 0xff;
|
data += 4;
|
||||||
*(data++) = (cp >> 8) & 0xff;
|
|
||||||
*(data++) = (cp >> 16) & 0xff;
|
|
||||||
*(data++) = cp >> 24;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user