12ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller/* GENERATED SOURCE. DO NOT MODIFY. */ 2f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert// © 2016 and later: Unicode, Inc. and others. 3f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert// License & terms of use: http://www.unicode.org/copyright.html#License 42ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller/* 52ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller******************************************************************************* 62ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller* Copyright (C) 2010-2014, International Business Machines 72ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller* Corporation and others. All Rights Reserved. 82ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller******************************************************************************* 92ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller* UTF16CollationIterator.java, ported from utf16collationiterator.h/.cpp 102ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller* 112ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller* C++ version created on: 2010oct27 122ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller* created by: Markus W. Scherer 132ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller*/ 142ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller 152ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fullerpackage android.icu.impl.coll; 162ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller 172ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller/** 182ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller * UTF-16 collation element and character iterator. 192ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller * Handles normalized UTF-16 text, with length or NUL-terminated. 202ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller * Unnormalized text is handled by a subclass. 21836e6b40a94ec3fb7545a76cb072960442b7eee9Neil Fuller * @hide Only a subset of ICU is exposed in Android 222ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller */ 232ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fullerpublic class UTF16CollationIterator extends CollationIterator { 242ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller /** 252ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller * Partial constructor, see {@link CollationIterator#CollationIterator(CollationData)}. 262ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller */ 272ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller public UTF16CollationIterator(CollationData d) { 282ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller super(d); 292ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller } 302ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller 312ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller public UTF16CollationIterator(CollationData d, boolean numeric, CharSequence s, int p) { 322ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller super(d, numeric); 332ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller seq = s; 342ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller start = 0; 352ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller pos = p; 362ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller limit = s.length(); 372ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller } 382ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller 392ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller @Override 402ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller public boolean equals(Object other) { 412ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller if(!super.equals(other)) { return false; } 422ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller UTF16CollationIterator o = (UTF16CollationIterator)other; 432ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller // Compare the iterator state but not the text: Assume that the caller does that. 442ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller return (pos - start) == (o.pos - o.start); 452ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller } 462ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller 472ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller @Override 482ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller public int hashCode() { 492ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller assert false : "hashCode not designed"; 502ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller return 42; // any arbitrary constant will do 512ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller } 522ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller 532ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller @Override 542ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller public void resetToOffset(int newOffset) { 552ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller reset(); 562ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller pos = start + newOffset; 572ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller } 582ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller 592ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller @Override 602ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller public int getOffset() { 612ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller return pos - start; 622ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller } 632ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller 642ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller public void setText(boolean numeric, CharSequence s, int p) { 652ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller reset(numeric); 662ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller seq = s; 672ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller start = 0; 682ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller pos = p; 692ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller limit = s.length(); 702ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller } 712ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller 722ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller @Override 732ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller public int nextCodePoint() { 742ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller if(pos == limit) { 752ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller return Collation.SENTINEL_CP; 762ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller } 772ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller char c = seq.charAt(pos++); 782ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller char trail; 792ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller if(Character.isHighSurrogate(c) && pos != limit && 802ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller Character.isLowSurrogate(trail = seq.charAt(pos))) { 812ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller ++pos; 822ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller return Character.toCodePoint(c, trail); 832ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller } else { 842ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller return c; 852ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller } 862ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller } 872ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller 882ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller @Override 892ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller public int previousCodePoint() { 902ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller if(pos == start) { 912ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller return Collation.SENTINEL_CP; 922ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller } 932ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller char c = seq.charAt(--pos); 942ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller char lead; 952ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller if(Character.isLowSurrogate(c) && pos != start && 962ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller Character.isHighSurrogate(lead = seq.charAt(pos - 1))) { 972ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller --pos; 982ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller return Character.toCodePoint(lead, c); 992ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller } else { 1002ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller return c; 1012ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller } 1022ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller } 1032ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller 1042ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller @Override 1052ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller protected long handleNextCE32() { 1062ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller if(pos == limit) { 1072ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller return NO_CP_AND_CE32; 1082ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller } 1092ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller char c = seq.charAt(pos++); 1102ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller return makeCodePointAndCE32Pair(c, trie.getFromU16SingleLead(c)); 1112ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller } 1122ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller 1132ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller @Override 1142ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller protected char handleGetTrailSurrogate() { 1152ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller if(pos == limit) { return 0; } 1162ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller char trail; 1172ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller if(Character.isLowSurrogate(trail = seq.charAt(pos))) { ++pos; } 1182ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller return trail; 1192ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller } 1202ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller 1212ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller /* boolean foundNULTerminator(); */ 1222ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller 1232ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller @Override 1242ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller protected void forwardNumCodePoints(int num) { 1252ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller while(num > 0 && pos != limit) { 1262ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller char c = seq.charAt(pos++); 1272ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller --num; 1282ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller if(Character.isHighSurrogate(c) && pos != limit && 1292ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller Character.isLowSurrogate(seq.charAt(pos))) { 1302ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller ++pos; 1312ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller } 1322ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller } 1332ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller } 1342ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller 1352ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller @Override 1362ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller protected void backwardNumCodePoints(int num) { 1372ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller while(num > 0 && pos != start) { 1382ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller char c = seq.charAt(--pos); 1392ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller --num; 1402ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller if(Character.isLowSurrogate(c) && pos != start && 1412ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller Character.isHighSurrogate(seq.charAt(pos-1))) { 1422ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller --pos; 1432ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller } 1442ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller } 1452ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller } 1462ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller 1472ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller protected CharSequence seq; 1482ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller protected int start; 1492ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller protected int pos; 1502ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller protected int limit; 1512ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller} 152