summaryrefslogtreecommitdiffstats
path: root/libjava/classpath/gnu/java/util/regex/RETokenChar.java
diff options
context:
space:
mode:
Diffstat (limited to 'libjava/classpath/gnu/java/util/regex/RETokenChar.java')
-rw-r--r--libjava/classpath/gnu/java/util/regex/RETokenChar.java183
1 files changed, 105 insertions, 78 deletions
diff --git a/libjava/classpath/gnu/java/util/regex/RETokenChar.java b/libjava/classpath/gnu/java/util/regex/RETokenChar.java
index 42dcd93268a..babcf3e4e93 100644
--- a/libjava/classpath/gnu/java/util/regex/RETokenChar.java
+++ b/libjava/classpath/gnu/java/util/regex/RETokenChar.java
@@ -38,98 +38,125 @@ exception statement from your version. */
package gnu.java.util.regex;
-final class RETokenChar extends REToken {
+import gnu.java.lang.CPStringBuilder;
+
+final class RETokenChar extends REToken
+{
private char[] ch;
private boolean insens;
- RETokenChar(int subIndex, char c, boolean ins) {
- super(subIndex);
+ RETokenChar (int subIndex, char c, boolean ins)
+ {
+ super (subIndex);
insens = ins;
- ch = new char [1];
- ch[0] = c;
+ ch = new char[1];
+ ch[0] = c;
}
- int getMinimumLength() {
+ int getMinimumLength ()
+ {
return ch.length;
}
-
- int getMaximumLength() {
+
+ int getMaximumLength ()
+ {
return ch.length;
}
-
- REMatch matchThis(CharIndexed input, REMatch mymatch) {
- if (matchOneString(input, mymatch.index)) {
- mymatch.index += matchedLength;
- return mymatch;
- }
- // java.util.regex.Matcher#hitEnd() requires that the length of
- // partial match be counted.
+
+ REMatch matchThis (CharIndexed input, REMatch mymatch)
+ {
+ if (matchOneString (input, mymatch.index))
+ {
mymatch.index += matchedLength;
- input.setHitEnd(mymatch);
- return null;
- }
-
- private int matchedLength;
- private boolean matchOneString(CharIndexed input, int index) {
- matchedLength = 0;
- int z = ch.length;
- char c;
- for (int i=0; i<z; i++) {
- c = input.charAt(index+i);
- if (! charEquals(c, ch[i])) {
- return false;
- }
- ++matchedLength;
- }
- return true;
- }
-
- private boolean charEquals(char c1, char c2) {
- if (c1 == c2) return true;
- if (! insens) return false;
- if (toLowerCase(c1, unicodeAware) == c2) return true;
- if (toUpperCase(c1, unicodeAware) == c2) return true;
- return false;
- }
-
- boolean returnsFixedLengthMatches() { return true; }
-
- int findFixedLengthMatches(CharIndexed input, REMatch mymatch, int max) {
- int index = mymatch.index;
- int numRepeats = 0;
- int z = ch.length;
- while (true) {
- if (numRepeats >= max) break;
- if (matchOneString(input, index)) {
- index += z;
- numRepeats++;
- }
- else break;
- }
- return numRepeats;
- }
+ return mymatch;
+ }
+ // java.util.regex.Matcher#hitEnd() requires that the length of
+ // partial match be counted.
+ mymatch.index += matchedLength;
+ input.setHitEnd (mymatch);
+ return null;
+ }
- // Overrides REToken.chain() to optimize for strings
- boolean chain(REToken next) {
- if (next instanceof RETokenChar && ((RETokenChar)next).insens == insens) {
- RETokenChar cnext = (RETokenChar) next;
- int newsize = ch.length + cnext.ch.length;
-
- char[] chTemp = new char [newsize];
-
- System.arraycopy(ch,0,chTemp,0,ch.length);
- System.arraycopy(cnext.ch,0,chTemp,ch.length,cnext.ch.length);
-
- ch = chTemp;
- if (cnext.next == null)
- return false;
- return chain(cnext.next);
- } else return super.chain(next);
+ private int matchedLength;
+ private boolean matchOneString (CharIndexed input, int index)
+ {
+ matchedLength = 0;
+ int z = ch.length;
+ char c;
+ for (int i = 0; i < z; i++)
+ {
+ c = input.charAt (index + i);
+ if (!charEquals (c, ch[i]))
+ {
+ return false;
+ }
+ ++matchedLength;
+ }
+ return true;
}
- void dump(StringBuffer os) {
- os.append(ch);
+ private boolean charEquals (char c1, char c2)
+ {
+ if (c1 == c2)
+ return true;
+ if (!insens)
+ return false;
+ if (toLowerCase (c1, unicodeAware) == c2)
+ return true;
+ if (toUpperCase (c1, unicodeAware) == c2)
+ return true;
+ return false;
+ }
+
+ boolean returnsFixedLengthMatches ()
+ {
+ return true;
}
-}
+ int findFixedLengthMatches (CharIndexed input, REMatch mymatch, int max)
+ {
+ int index = mymatch.index;
+ int numRepeats = 0;
+ int z = ch.length;
+ while (true)
+ {
+ if (numRepeats >= max)
+ break;
+ if (matchOneString (input, index))
+ {
+ index += z;
+ numRepeats++;
+ }
+ else
+ break;
+ }
+ return numRepeats;
+ }
+ // Overrides REToken.chain() to optimize for strings
+ boolean chain (REToken next)
+ {
+ if (next instanceof RETokenChar && ((RETokenChar) next).insens == insens)
+ {
+ RETokenChar cnext = (RETokenChar) next;
+ int newsize = ch.length + cnext.ch.length;
+
+ char[] chTemp = new char[newsize];
+
+ System.arraycopy (ch, 0, chTemp, 0, ch.length);
+ System.arraycopy (cnext.ch, 0, chTemp, ch.length, cnext.ch.length);
+
+ ch = chTemp;
+ if (cnext.next == null)
+ return false;
+ return chain (cnext.next);
+ }
+ else
+ return super.chain (next);
+ }
+
+ void dump (CPStringBuilder os)
+ {
+ os.append (ch);
+ }
+}
OpenPOWER on IntegriCloud