new version with WorkingCopy Management
[phpeclipse.git] / net.sourceforge.phpeclipse / src / net / sourceforge / phpdt / internal / core / util / CharArrayOps.java
diff --git a/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/core/util/CharArrayOps.java b/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/core/util/CharArrayOps.java
new file mode 100644 (file)
index 0000000..7041eb4
--- /dev/null
@@ -0,0 +1,145 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2003 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials 
+ * are made available under the terms of the Common Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/cpl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package net.sourceforge.phpdt.internal.core.util;
+
+/**
+ * A class to do characters operations so that we can use
+ * char arrays more effectively.
+ */
+public class CharArrayOps { // TODO: should promote to CharOperation
+/**
+ * Returns the char arrays as an array of Strings
+ */
+public static String[] charcharToString(char[][] charchar) {
+       if (charchar == null) {
+               return null;
+       }
+       String[] strings= new String[charchar.length];
+       for (int i= 0; i < charchar.length; i++) {
+               strings[i]= new String(charchar[i]);
+       }
+       return strings;
+}
+/**
+ * Returns the char array as a String
+ */
+public static String charToString(char[] chars) {
+       if (chars == null) {
+               return null;
+       } else {
+               return new String(chars);
+       }
+}
+/**
+ * Concatinates the two arrays into one big array.
+ * If the first array is null, returns the second array.
+ * If the second array is null, returns the first array.
+ *
+ * @param first - the array which the other array is concatinated onto
+ * @param second - the array which is to be concatinated onto the first array
+ */
+public static char[] concat(char[] first, char[] second) {
+       if (first == null)
+               return second;
+       if (second == null)
+               return first;
+
+       int length1 = first.length;
+       int length2 = second.length;
+       char[] result = new char[length1 + length2];
+       System.arraycopy(first, 0, result, 0, length1);
+       System.arraycopy(second, 0, result, length1, length2);
+       return result;
+}
+/**
+ * Checks the two character arrays for equality.
+ *
+ * @param first - one of the arrays to be compared
+ * @param second - the other array which is to be compared
+ */
+public static boolean equals(char[] first, char[] second) {
+       if (first == second)
+               return true;
+       if (first == null || second == null)
+               return false;
+       if (first.length != second.length)
+               return false;
+
+       for (int i = 0, length = first.length; i < length; i++)
+               if (first[i] != second[i])
+                       return false;
+       return true;
+}
+/**
+ * Returns the index of the first occurrence of character in buffer,
+ * starting from offset, or -1 if not found.
+ */
+public static int indexOf(char character, char[] buffer, int offset) {
+       for (int i= offset; i < buffer.length; i++) {
+               if (buffer[i] == character) {
+                       return i;
+               }
+       }
+       return -1;
+}
+/**
+ * Extracts a sub-array from the given array, starting
+ * at the given startIndex and proceeding for length characters.
+ * Returns null if:
+ *  1. the src array is null
+ *  2. the start index is out of bounds
+ *  3. the length parameter specifies a end point which is out of bounds
+ * Does not return a copy of the array if possible, in other words, if start is zero
+ * and length equals the length of the src array.
+ *
+ * @param src - the array from which elements need to be copied
+ * @param start - the start index in the src array
+ * @param length - the number of characters to copy
+ */
+public static char[] subarray(char[] src, int start, int length) {
+       if (src == null)
+               return null;
+       int srcLength = src.length;
+       if (start < 0 || start >= srcLength)
+               return null;
+       if (length < 0 || start + length > srcLength)
+               return null;
+       if (srcLength == length && start == 0)
+               return src;
+               
+       char[] result = new char[length];
+       if (length > 0)
+               System.arraycopy(src, start, result, 0, length);
+       return result;
+}
+/**
+ * Extracts a substring from the given array, starting
+ * at the given startIndex and proceeding for length characters.
+ * Returns null if:
+ *  1. the src array is null
+ *  2. the start index is out of bounds
+ *  3. the length parameter specifies a end point which is out of bounds
+ * Does not return a copy of the array if possible (if start is zero
+ * and length equals the length of the src array).
+ *
+ * @param src - the array from which elements need to be copied
+ * @param start - the start index in the src array
+ * @param length - the number of characters to copy
+ */
+public static String substring(char[] src, int start, int length) {
+       char[] chars= subarray(src, start, length);
+       if (chars != null) {
+               return new String(chars);
+       } else {
+               return null;
+       }
+}
+}