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();
|
||||
if (!state || !(state->flags & QTextCodec::IgnoreHeader)) {
|
||||
QChar bom(QChar::ByteOrderMark);
|
||||
if (endian == BigEndianness) {
|
||||
data[0] = bom.row();
|
||||
data[1] = bom.cell();
|
||||
} else {
|
||||
data[0] = bom.cell();
|
||||
data[1] = bom.row();
|
||||
}
|
||||
if (endian == BigEndianness)
|
||||
qToBigEndian(bom.unicode(), data);
|
||||
else
|
||||
qToLittleEndian(bom.unicode(), data);
|
||||
data += 2;
|
||||
}
|
||||
if (endian == BigEndianness) {
|
||||
for (int i = 0; i < len; ++i) {
|
||||
*(data++) = uc[i].row();
|
||||
*(data++) = uc[i].cell();
|
||||
}
|
||||
} else {
|
||||
for (int i = 0; i < len; ++i) {
|
||||
*(data++) = uc[i].cell();
|
||||
*(data++) = uc[i].row();
|
||||
}
|
||||
}
|
||||
if (endian == BigEndianness)
|
||||
qToBigEndian<ushort>(uc, len, data);
|
||||
else
|
||||
qToLittleEndian<ushort>(uc, len, data);
|
||||
|
||||
if (state) {
|
||||
state->remainingChars = 0;
|
||||
@ -891,20 +881,14 @@ QByteArray QUtf32::convertFromUnicode(const QChar *uc, int len, QTextCodec::Conv
|
||||
if (endian == BigEndianness) {
|
||||
while (i.hasNext()) {
|
||||
uint cp = i.next();
|
||||
|
||||
*(data++) = cp >> 24;
|
||||
*(data++) = (cp >> 16) & 0xff;
|
||||
*(data++) = (cp >> 8) & 0xff;
|
||||
*(data++) = cp & 0xff;
|
||||
qToBigEndian(cp, data);
|
||||
data += 4;
|
||||
}
|
||||
} else {
|
||||
while (i.hasNext()) {
|
||||
uint cp = i.next();
|
||||
|
||||
*(data++) = cp & 0xff;
|
||||
*(data++) = (cp >> 8) & 0xff;
|
||||
*(data++) = (cp >> 16) & 0xff;
|
||||
*(data++) = cp >> 24;
|
||||
qToLittleEndian(cp, data);
|
||||
data += 4;
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user