]> git.saurik.com Git - apple/icu.git/blobdiff - icuSources/tools/toolutil/collationinfo.cpp
ICU-57166.0.1.tar.gz
[apple/icu.git] / icuSources / tools / toolutil / collationinfo.cpp
index 7bf38614e5ed1d9d0622d304a1faf1b78b1b0f02..fef1cdf1051cc9ddd6d1ef7782b9186aca5aafa7 100644 (file)
@@ -1,6 +1,6 @@
 /*
 *******************************************************************************
-* Copyright (C) 2013-2014, International Business Machines
+* Copyright (C) 2013-2015, International Business Machines
 * Corporation and others.  All Rights Reserved.
 *******************************************************************************
 * collationinfo.cpp
 
 #if !UCONFIG_NO_COLLATION
 
+#include "collationdata.h"
 #include "collationdatareader.h"
 #include "collationinfo.h"
 #include "uassert.h"
+#include "uvectr32.h"
 
 U_NAMESPACE_BEGIN
 
@@ -112,6 +114,37 @@ CollationInfo::getDataLength(const int32_t indexes[], int32_t startIndex) {
     return indexes[startIndex + 1] - indexes[startIndex];
 }
 
+void
+CollationInfo::printReorderRanges(const CollationData &data, const int32_t *codes, int32_t length) {
+    UErrorCode errorCode = U_ZERO_ERROR;
+    UVector32 ranges(errorCode);
+    data.makeReorderRanges(codes, length, ranges, errorCode);
+    if(U_FAILURE(errorCode)) {
+        printf("  error building reorder ranges: %s\n", u_errorName(errorCode));
+        return;
+    }
+
+    int32_t start = 0;
+    for(int32_t i = 0; i < ranges.size(); ++i) {
+        int32_t pair = ranges.elementAti(i);
+        int32_t limit = (pair >> 16) & 0xffff;
+        int16_t offset = (int16_t)pair;
+        if(offset == 0) {
+            // [inclusive-start, exclusive-limit[
+            printf("          [%04x, %04x[\n", start, limit);
+        } else if(offset > 0) {
+            printf("  reorder [%04x, %04x[ by offset  %02x to [%04x, %04x[\n",
+                    start, limit, offset,
+                    start + (offset << 8), limit + (offset << 8));
+        } else /* offset < 0 */ {
+            printf("  reorder [%04x, %04x[ by offset -%02x to [%04x, %04x[\n",
+                    start, limit, -offset,
+                    start + (offset << 8), limit + (offset << 8));
+        }
+        start = limit;
+    }
+}
+
 U_NAMESPACE_END
 
 #endif  // !UCONFIG_NO_COLLATION