Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(2)

Unified Diff: source/i18n/collationdatawriter.cpp

Issue 1621843002: ICU 56 update step 1 (Closed) Base URL: https://chromium.googlesource.com/chromium/deps/icu.git@561
Patch Set: Created 4 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « source/i18n/collationdatareader.cpp ('k') | source/i18n/collationfastlatin.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: source/i18n/collationdatawriter.cpp
diff --git a/source/i18n/collationdatawriter.cpp b/source/i18n/collationdatawriter.cpp
index dc600aff524de4d8ba173abc239e3ac65a5c4f48..6943ed2c61f0b56bba98d27a98b64d9fa27d7e17 100644
--- a/source/i18n/collationdatawriter.cpp
+++ b/source/i18n/collationdatawriter.cpp
@@ -1,6 +1,6 @@
/*
*******************************************************************************
-* Copyright (C) 2013-2014, International Business Machines
+* Copyright (C) 2013-2015, International Business Machines
* Corporation and others. All Rights Reserved.
*******************************************************************************
* collationdatawriter.cpp
@@ -68,7 +68,7 @@ static const UDataInfo dataInfo = {
0,
{ 0x55, 0x43, 0x6f, 0x6c }, // dataFormat="UCol"
- { 4, 0, 0, 0 }, // formatVersion
+ { 5, 0, 0, 0 }, // formatVersion
{ 6, 3, 0, 0 } // dataVersion
};
@@ -157,6 +157,23 @@ CollationDataWriter::write(UBool isBase, const UVersionInfo dataVersion,
}
}
+ UVector32 codesAndRanges(errorCode);
+ const int32_t *reorderCodes = settings.reorderCodes;
+ int32_t reorderCodesLength = settings.reorderCodesLength;
+ if(settings.hasReordering() &&
+ CollationSettings::reorderTableHasSplitBytes(settings.reorderTable)) {
+ // Rebuild the full list of reorder ranges.
+ // The list in the settings is truncated for efficiency.
+ data.makeReorderRanges(reorderCodes, reorderCodesLength, codesAndRanges, errorCode);
+ // Write the codes, then the ranges.
+ for(int32_t i = 0; i < reorderCodesLength; ++i) {
+ codesAndRanges.insertElementAt(reorderCodes[i], i, errorCode);
+ }
+ if(U_FAILURE(errorCode)) { return 0; }
+ reorderCodes = codesAndRanges.getBuffer();
+ reorderCodesLength = codesAndRanges.size();
+ }
+
int32_t headerSize;
if(isBase) {
headerSize = 0; // udata_create() writes the header
@@ -171,7 +188,7 @@ CollationDataWriter::write(UBool isBase, const UVersionInfo dataVersion,
if(hasMappings && data.cesLength != 0) {
// Sum of the sizes of the data items which are
// not automatically multiples of 8 bytes and which are placed before the CEs.
- int32_t sum = headerSize + (indexesLength + settings.reorderCodesLength) * 4;
+ int32_t sum = headerSize + (indexesLength + reorderCodesLength) * 4;
if((sum & 7) != 0) {
// We need to add padding somewhere so that the 64-bit CEs are 8-aligned.
// We add to the header size here.
@@ -211,7 +228,7 @@ CollationDataWriter::write(UBool isBase, const UVersionInfo dataVersion,
}
indexes[CollationDataReader::IX_REORDER_CODES_OFFSET] = totalSize;
- totalSize += settings.reorderCodesLength * 4;
+ totalSize += reorderCodesLength * 4;
indexes[CollationDataReader::IX_REORDER_TABLE_OFFSET] = totalSize;
if(settings.reorderTable != NULL) {
@@ -280,9 +297,13 @@ CollationDataWriter::write(UBool isBase, const UVersionInfo dataVersion,
indexes[CollationDataReader::IX_FAST_LATIN_TABLE_OFFSET] = totalSize;
totalSize += fastLatinTableLength * 2;
+ UnicodeString scripts;
indexes[CollationDataReader::IX_SCRIPTS_OFFSET] = totalSize;
if(isBase) {
- totalSize += data.scriptsLength * 2;
+ scripts.append((UChar)data.numScripts);
+ scripts.append(reinterpret_cast<const UChar *>(data.scriptsIndex), data.numScripts + 16);
+ scripts.append(reinterpret_cast<const UChar *>(data.scriptStarts), data.scriptStartsLength);
+ totalSize += scripts.length() * 2;
}
indexes[CollationDataReader::IX_COMPRESSIBLE_BYTES_OFFSET] = totalSize;
@@ -299,7 +320,7 @@ CollationDataWriter::write(UBool isBase, const UVersionInfo dataVersion,
}
uprv_memcpy(dest, indexes, indexesLength * 4);
- copyData(indexes, CollationDataReader::IX_REORDER_CODES_OFFSET, settings.reorderCodes, dest);
+ copyData(indexes, CollationDataReader::IX_REORDER_CODES_OFFSET, reorderCodes, dest);
copyData(indexes, CollationDataReader::IX_REORDER_TABLE_OFFSET, settings.reorderTable, dest);
// The trie has already been serialized into the dest buffer.
copyData(indexes, CollationDataReader::IX_CES_OFFSET, data.ces, dest);
@@ -308,7 +329,7 @@ CollationDataWriter::write(UBool isBase, const UVersionInfo dataVersion,
copyData(indexes, CollationDataReader::IX_CONTEXTS_OFFSET, data.contexts, dest);
// The unsafeBackwardSet has already been serialized into the dest buffer.
copyData(indexes, CollationDataReader::IX_FAST_LATIN_TABLE_OFFSET, data.fastLatinTable, dest);
- copyData(indexes, CollationDataReader::IX_SCRIPTS_OFFSET, data.scripts, dest);
+ copyData(indexes, CollationDataReader::IX_SCRIPTS_OFFSET, scripts.getBuffer(), dest);
copyData(indexes, CollationDataReader::IX_COMPRESSIBLE_BYTES_OFFSET, data.compressibleBytes, dest);
return headerSize + totalSize;
« no previous file with comments | « source/i18n/collationdatareader.cpp ('k') | source/i18n/collationfastlatin.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698