From 19270f5476c37485eabd82a3897f10964292ce7e Mon Sep 17 00:00:00 2001 From: Shane Carr Date: Wed, 28 Feb 2018 05:48:40 +0000 Subject: [PATCH] ICU-13574 Deleting file that should have been deleted by merge X-SVN-Rev: 41005 --- .../icu/impl/number/parse/StringSegment.java | 195 ------------------ 1 file changed, 195 deletions(-) delete mode 100644 icu4j/main/classes/core/src/com/ibm/icu/impl/number/parse/StringSegment.java diff --git a/icu4j/main/classes/core/src/com/ibm/icu/impl/number/parse/StringSegment.java b/icu4j/main/classes/core/src/com/ibm/icu/impl/number/parse/StringSegment.java deleted file mode 100644 index 31a9c62dfb1..00000000000 --- a/icu4j/main/classes/core/src/com/ibm/icu/impl/number/parse/StringSegment.java +++ /dev/null @@ -1,195 +0,0 @@ -// © 2017 and later: Unicode, Inc. and others. -// License & terms of use: http://www.unicode.org/copyright.html#License -package com.ibm.icu.impl.number.parse; - -import com.ibm.icu.lang.UCharacter; -import com.ibm.icu.text.UnicodeSet; - -/** - * A mutable class allowing for a String with a variable offset and length. The charAt, length, and - * subSequence methods all operate relative to the fixed offset into the String. - * - * TODO: Make sure that this operates only on code point boundaries. - * - * @author sffc - */ -public class StringSegment implements CharSequence { - private final String str; - private int start; - private int end; - private boolean foldCase; - - public StringSegment(String str, int parseFlags) { - this.str = str; - this.start = 0; - this.end = str.length(); - this.foldCase = 0 != (parseFlags & ParsingUtils.PARSE_FLAG_IGNORE_CASE); - } - - public int getOffset() { - return start; - } - - public void setOffset(int start) { - assert start <= end; - this.start = start; - } - - /** - * Equivalent to setOffset(getOffset()+delta). - * - *

- * This method is usually called by a Matcher to register that a char was consumed. If the char is - * strong (it usually is, except for things like whitespace), follow this with a call to - * {@link ParsedNumber#setCharsConsumed}. For more information on strong chars, see that method. - */ - public void adjustOffset(int delta) { - assert start + delta >= 0; - assert start + delta <= end; - start += delta; - } - - /** - * Adjusts the offset by the width of the current code point, either 1 or 2 chars. - */ - public void adjustOffsetByCodePoint() { - start += Character.charCount(getCodePoint()); - } - - public void setLength(int length) { - assert length >= 0; - assert start + length <= str.length(); - end = start + length; - } - - public void resetLength() { - end = str.length(); - } - - @Override - public int length() { - return end - start; - } - - @Override - public char charAt(int index) { - return str.charAt(index + start); - } - - public int codePointAt(int index) { - return str.codePointAt(index + start); - } - - @Override - public CharSequence subSequence(int start, int end) { - throw new AssertionError(); // Never used - // Possible implementation: - // return str.subSequence(start + this.start, end + this.start); - } - - /** - * Returns the first code point in the string segment, or -1 if the string starts with an invalid - * code point. - * - *

- * Important: Most of the time, you should use {@link #matches}, which handles case - * folding logic, instead of this method. - */ - public int getCodePoint() { - assert start < end; - char lead = str.charAt(start); - char trail; - if (Character.isHighSurrogate(lead) - && start + 1 < end - && Character.isLowSurrogate(trail = str.charAt(start + 1))) { - return Character.toCodePoint(lead, trail); - } - return lead; - } - - /** - * Returns true if the first code point of this StringSegment equals the given code point. - * - *

- * This method will perform case folding if case folding is enabled for the parser. - */ - public boolean matches(int otherCp) { - return codePointsEqual(getCodePoint(), otherCp, foldCase); - } - - /** - * Returns true if the first code point of this StringSegment is in the given UnicodeSet. - */ - public boolean matches(UnicodeSet uniset) { - // TODO: Move UnicodeSet case-folding logic here. - // TODO: Handle string matches here instead of separately. - int cp = getCodePoint(); - if (cp == -1) { - return false; - } - return uniset.contains(cp); - } - - /** - * Returns the length of the prefix shared by this StringSegment and the given CharSequence. For - * example, if this string segment is "aab", and the char sequence is "aac", this method returns 2, - * since the first 2 characters are the same. - * - *

- * This method will perform case folding if case folding is enabled for the parser. - */ - public int getCommonPrefixLength(CharSequence other) { - return getPrefixLengthInternal(other, foldCase); - } - - /** - * Like {@link #getCommonPrefixLength}, but never performs case folding, even if case folding is - * enabled for the parser. - */ - public int getCaseSensitivePrefixLength(CharSequence other) { - return getPrefixLengthInternal(other, false); - } - - private int getPrefixLengthInternal(CharSequence other, boolean foldCase) { - int offset = 0; - for (; offset < Math.min(length(), other.length());) { - // TODO: case-fold code points, not chars - char c1 = charAt(offset); - char c2 = other.charAt(offset); - if (!codePointsEqual(c1, c2, foldCase)) { - break; - } - offset++; - } - return offset; - } - - // /** - // * Case-folds the string if IGNORE_CASE flag is set; otherwise, returns the same string. - // */ - // public static String maybeFold(String input, int parseFlags) { - // UnicodeSet cwcf = UnicodeSetStaticCache.get(UnicodeSetStaticCache.Key.CWCF); - // if (0 != (parseFlags & ParsingUtils.PARSE_FLAG_IGNORE_CASE) && cwcf.containsSome(input)) { - // return UCharacter.foldCase(input, true); - // } else { - // return input; - // } - // } - - private static final boolean codePointsEqual(int cp1, int cp2, boolean foldCase) { - if (cp1 == cp2) { - return true; - } - if (!foldCase) { - return false; - } - cp1 = UCharacter.foldCase(cp1, true); - cp2 = UCharacter.foldCase(cp2, true); - return cp1 == cp2; - } - - @Override - public String toString() { - return str.substring(0, start) + "[" + str.substring(start, end) + "]" + str.substring(end); - } -} -- 2.40.0