1
0
Fork 0
mirror of https://github.com/eclipse-cdt/cdt synced 2025-04-29 19:45:01 +02:00

Fixed a bug in CharArrayUtils.lastIndexOf(char[], char[]) method.

This commit is contained in:
Sergey Prigogin 2015-06-24 18:22:39 -07:00
parent 75a3d71546
commit 6c4344f714
2 changed files with 79 additions and 20 deletions

View file

@ -1,5 +1,5 @@
/******************************************************************************* /*******************************************************************************
* Copyright (c) 2004, 2009 IBM Corporation and others. * Copyright (c) 2004, 2015 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials * All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0 * are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at * which accompanies this distribution, and is available at
@ -7,14 +7,15 @@
* *
* Contributors: * Contributors:
* IBM Corporation - initial implementation * IBM Corporation - initial implementation
* Sergey Prigogin (Google)
*******************************************************************************/ *******************************************************************************/
package org.eclipse.cdt.core.parser.tests; package org.eclipse.cdt.core.parser.tests;
import junit.framework.TestCase;
import org.eclipse.cdt.core.parser.util.CharArrayObjectMap; import org.eclipse.cdt.core.parser.util.CharArrayObjectMap;
import org.eclipse.cdt.core.parser.util.CharArrayUtils; import org.eclipse.cdt.core.parser.util.CharArrayUtils;
import junit.framework.TestCase;
/** /**
* @author Doug Schaefer * @author Doug Schaefer
*/ */
@ -50,4 +51,28 @@ public class CharArrayUtilsTest extends TestCase {
assertFalse(CharArrayUtils.equals("pre_abc".toCharArray(), 4, 4, "abcd".toCharArray(), true)); assertFalse(CharArrayUtils.equals("pre_abc".toCharArray(), 4, 4, "abcd".toCharArray(), true));
assertTrue(CharArrayUtils.equals("pre_abc".toCharArray(), 4, 2, "AB".toCharArray(), true)); assertTrue(CharArrayUtils.equals("pre_abc".toCharArray(), 4, 2, "AB".toCharArray(), true));
} }
public void testTrim() {
assertEquals("", new String(CharArrayUtils.trim("".toCharArray())));
assertEquals("", new String(CharArrayUtils.trim(" ".toCharArray())));
assertEquals("a", new String(CharArrayUtils.trim(" a".toCharArray())));
assertEquals("a", new String(CharArrayUtils.trim(" a ".toCharArray())));
assertEquals("a b", new String(CharArrayUtils.trim(" a b ".toCharArray())));
assertEquals("a b", new String(CharArrayUtils.trim("a b ".toCharArray())));
}
public void testLastIndexOf() {
assertEquals(-1, CharArrayUtils.lastIndexOf('a', "".toCharArray()));
assertEquals(3, CharArrayUtils.lastIndexOf('a', "array".toCharArray()));
assertEquals(-1, CharArrayUtils.lastIndexOf('a', "array".toCharArray(), 4));
assertEquals(3, CharArrayUtils.lastIndexOf('a', "array".toCharArray(), 3));
assertEquals(8, CharArrayUtils.lastIndexOf("aaabbbaa".toCharArray(),
"aaabbbaaaaabbbaabbbaa".toCharArray()));
assertEquals(-1, CharArrayUtils.lastIndexOf("aaabbbaa".toCharArray(),
"aabbbaabbbaa".toCharArray()));
assertEquals(6, CharArrayUtils.lastIndexOf("".toCharArray(), "123456".toCharArray()));
assertEquals(4, CharArrayUtils.lastIndexOf("56".toCharArray(), "123456".toCharArray()));
assertEquals(-1, CharArrayUtils.lastIndexOf("123".toCharArray(), "".toCharArray()));
}
} }

View file

@ -1,5 +1,5 @@
/******************************************************************************* /*******************************************************************************
* Copyright (c) 2004, 2009 IBM Corporation and others. * Copyright (c) 2004, 2015 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials * All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0 * are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at * which accompanies this distribution, and is available at
@ -33,7 +33,7 @@ public class CharArrayUtils {
int end = start + length; int end = start + length;
for (int curr = start; curr < end; ++curr) { for (int curr = start; curr < end; ++curr) {
h += (h << 3) + str[curr]; h = 31 * h + str[curr];
} }
return h; return h;
@ -300,33 +300,65 @@ public class CharArrayUtils {
} }
public static final int lastIndexOf(char[] toBeFound, char[] array) { public static final int lastIndexOf(char[] toBeFound, char[] array) {
int j = toBeFound.length - 1; return lastIndexOf(toBeFound, array, 0);
for (int i = array.length; --i >= 0;) { }
if (toBeFound[j] == array[i]) {
if (--j == -1) /**
return i; * @since 5.11
} else { */
j = toBeFound.length - 1; public static int lastIndexOf(char toBeFound, char[] array) {
return lastIndexOf(toBeFound, array, 0);
}
/**
* @since 5.11
*/
public static int lastIndexOf(char toBeFound, char[] array, int fromIndex) {
for (int i = array.length; --i >= fromIndex;) {
if (array[i] == toBeFound) {
return i;
} }
} }
return -1; return -1;
} }
/**
* @since 5.11
*/
public static int lastIndexOf(char[] toBeFound, char[] array, int fromIndex) {
int i = array.length;
int j = toBeFound.length;
while (true) {
if (--j < 0)
return i;
if (--i < fromIndex)
return -1;
if (toBeFound[j] != array[i]) {
i += toBeFound.length - j - 1;
j = toBeFound.length;
}
}
}
static final public char[] trim(char[] chars) { static final public char[] trim(char[] chars) {
if (chars == null) if (chars == null)
return null; return null;
int start = 0, length = chars.length, end = length - 1; int length = chars.length;
int start = 0;
while (start < length && chars[start] == ' ') { while (start < length && chars[start] == ' ') {
start++; start++;
} }
while (end > start && chars[end] == ' ') { if (start == length)
end--; return EMPTY_CHAR_ARRAY;
int end = length;
while (--end > start && chars[end] == ' ') {
} }
if (start != 0 || end != length - 1) { end++;
return subarray(chars, start, end + 1); if (start == 0 && end == length)
} return chars;
return chars; return subarray(chars, start, end);
} }
static final public char[] lastSegment(char[] array, char[] separator) { static final public char[] lastSegment(char[] array, char[] separator) {
@ -369,6 +401,8 @@ public class CharArrayUtils {
*/ */
public static char[] extractChars(StringBuilder buf) { public static char[] extractChars(StringBuilder buf) {
final int len = buf.length(); final int len = buf.length();
if (len == 0)
return EMPTY_CHAR_ARRAY;
char[] result= new char[len]; char[] result= new char[len];
buf.getChars(0, len, result, 0); buf.getChars(0, len, result, 0);
return result; return result;