craigmcc 01/05/19 18:15:18
Modified: src/share/org/apache/struts/util FastArrayList.java
FastHashMap.java FastTreeMap.java
Log:
Update to current versions from the Commons Collections project. After
1.0 final, Struts will be modified to use the Commons classes directly.
Revision Changes Path
1.4 +101 -6
jakarta-struts/src/share/org/apache/struts/util/FastArrayList.java
Index: FastArrayList.java
===================================================================
RCS file:
/home/cvs/jakarta-struts/src/share/org/apache/struts/util/FastArrayList.java,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- FastArrayList.java 2001/02/12 00:32:13 1.3
+++ FastArrayList.java 2001/05/20 01:15:17 1.4
@@ -1,7 +1,7 @@
/*
- * $Header:
/home/cvs/jakarta-struts/src/share/org/apache/struts/util/FastArrayList.java,v 1.3
2001/02/12 00:32:13 craigmcc Exp $
- * $Revision: 1.3 $
- * $Date: 2001/02/12 00:32:13 $
+ * $Header:
/home/cvs/jakarta-struts/src/share/org/apache/struts/util/FastArrayList.java,v 1.4
2001/05/20 01:15:17 craigmcc Exp $
+ * $Revision: 1.4 $
+ * $Date: 2001/05/20 01:15:17 $
*
* ====================================================================
*
@@ -93,14 +93,14 @@
* <code>java.util.ArrayList</code> directly (with no synchronization), for
* maximum performance.</p>
*
- * <p><strong>NOTE</strong>: The following methods are <strong>NOT</strong>
- * overridden: clone(), equals(Object), hashCode().</p>
+ * @deprecated At some point after Struts 1.0 final, will be replaced by
+ * an equivalent class in the Jakarta Commons Collections package.
*
* @author Craig R. McClanahan
- * @version $Revision: 1.3 $ $Date: 2001/02/12 00:32:13 $
+ * @version $Revision: 1.4 $ $Date: 2001/05/20 01:15:17 $
*/
-public class FastArrayList implements List, Cloneable, Serializable {
+public class FastArrayList extends ArrayList {
// ----------------------------------------------------------- Constructors
@@ -301,6 +301,26 @@
/**
+ * Return a shallow copy of this <code>FastArrayList</code> instance.
+ * The elements themselves are not copied.
+ */
+ public Object clone() {
+
+ FastArrayList results = null;
+ if (fast) {
+ results = new FastArrayList(list);
+ } else {
+ synchronized (list) {
+ results = new FastArrayList(list);
+ }
+ }
+ results.setFast(getFast());
+ return (results);
+
+ }
+
+
+ /**
* Return <code>true</code> if this list contains the specified element.
*
* @param element The element to test for
@@ -362,6 +382,51 @@
/**
+ * Compare the specified object with this list for equality. This
+ * implementation uses exactly the code that is used to define the
+ * list equals function in the documentation for the
+ * <code>List.equals</code> method.
+ *
+ * @param o Object to be compared to this list
+ */
+ public boolean equals(Object o) {
+
+ // Simple tests that require no synchronization
+ if (o == this)
+ return (true);
+ else if (!(o instanceof List))
+ return (false);
+ List lo = (List) o;
+
+ // Compare the sets of elements for equality
+ if (fast) {
+ ListIterator li1 = list.listIterator();
+ ListIterator li2 = lo.listIterator();
+ while (li1.hasNext() && li2.hasNext()) {
+ Object o1 = li1.next();
+ Object o2 = li2.next();
+ if (!(o1 == null ? o2 == null : o1.equals(o2)))
+ return (false);
+ }
+ return (!(li1.hasNext() || li2.hasNext()));
+ } else {
+ synchronized (list) {
+ ListIterator li1 = list.listIterator();
+ ListIterator li2 = lo.listIterator();
+ while (li1.hasNext() && li2.hasNext()) {
+ Object o1 = li1.next();
+ Object o2 = li2.next();
+ if (!(o1 == null ? o2 == null : o1.equals(o2)))
+ return (false);
+ }
+ return (!(li1.hasNext() || li2.hasNext()));
+ }
+ }
+
+ }
+
+
+ /**
* Return the element at the specified position in the list.
*
* @param index The index of the element to return
@@ -375,6 +440,36 @@
} else {
synchronized (list) {
return (list.get(index));
+ }
+ }
+
+ }
+
+
+ /**
+ * Return the hash code value for this list. This implementation uses
+ * exactly the code that is used to define the list hash function in the
+ * documentation for the <code>List.hashCode</code> method.
+ */
+ public int hashCode() {
+
+ if (fast) {
+ int hashCode = 1;
+ Iterator i = list.iterator();
+ while (i.hasNext()) {
+ Object o = i.next();
+ hashCode = 31 * hashCode + (o == null ? 0 : o.hashCode());
+ }
+ return (hashCode);
+ } else {
+ synchronized (list) {
+ int hashCode = 1;
+ Iterator i = list.iterator();
+ while (i.hasNext()) {
+ Object o = i.next();
+ hashCode = 31 * hashCode + (o == null ? 0 : o.hashCode());
+ }
+ return (hashCode);
}
}
1.4 +113 -7 jakarta-struts/src/share/org/apache/struts/util/FastHashMap.java
Index: FastHashMap.java
===================================================================
RCS file:
/home/cvs/jakarta-struts/src/share/org/apache/struts/util/FastHashMap.java,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- FastHashMap.java 2001/02/12 00:32:13 1.3
+++ FastHashMap.java 2001/05/20 01:15:17 1.4
@@ -1,7 +1,7 @@
/*
- * $Header:
/home/cvs/jakarta-struts/src/share/org/apache/struts/util/FastHashMap.java,v 1.3
2001/02/12 00:32:13 craigmcc Exp $
- * $Revision: 1.3 $
- * $Date: 2001/02/12 00:32:13 $
+ * $Header:
/home/cvs/jakarta-struts/src/share/org/apache/struts/util/FastHashMap.java,v 1.4
2001/05/20 01:15:17 craigmcc Exp $
+ * $Revision: 1.4 $
+ * $Date: 2001/05/20 01:15:17 $
*
* ====================================================================
*
@@ -68,6 +68,7 @@
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
+import java.util.Map.Entry;
import java.util.Set;
@@ -93,14 +94,14 @@
* <code>java.util.HashMap</code> directly (with no synchronization), for
* maximum performance.</p>
*
- * <p><strong>NOTE</strong>: The following methods are <strong>NOT</strong>
- * overridden: clone(), equals(Object), hashCode().</p>
+ * @deprecated At some point after Struts 1.0 final, will be replaced by
+ * an equivalent class in the Jakarta Commons Collections package.
*
* @author Craig R. McClanahan
- * @version $Revision: 1.3 $ $Date: 2001/02/12 00:32:13 $
+ * @version $Revision: 1.4 $ $Date: 2001/05/20 01:15:17 $
*/
-public class FastHashMap implements Map, Cloneable, Serializable {
+public class FastHashMap extends HashMap {
// ----------------------------------------------------------- Constructors
@@ -207,6 +208,26 @@
/**
+ * Return a shallow copy of this <code>FastHashMap</code> instance.
+ * The keys and values themselves are not copied.
+ */
+ public Object clone() {
+
+ FastHashMap results = null;
+ if (fast) {
+ results = new FastHashMap(map);
+ } else {
+ synchronized (map) {
+ results = new FastHashMap(map);
+ }
+ }
+ results.setFast(getFast());
+ return (results);
+
+ }
+
+
+ /**
* Return <code>true</code> if this map contains a mapping for the
* specified key.
*
@@ -262,6 +283,65 @@
/**
+ * Compare the specified object with this list for equality. This
+ * implementation uses exactly the code that is used to define the
+ * list equals function in the documentation for the
+ * <code>Map.equals</code> method.
+ *
+ * @param o Object to be compared to this list
+ */
+ public boolean equals(Object o) {
+
+ // Simple tests that require no synchronization
+ if (o == this)
+ return (true);
+ else if (!(o instanceof Map))
+ return (false);
+ Map mo = (Map) o;
+
+ // Compare the two maps for equality
+ if (fast) {
+ if (mo.size() != map.size())
+ return (false);
+ Iterator i = map.entrySet().iterator();
+ while (i.hasNext()) {
+ Map.Entry e = (Map.Entry) i.next();
+ Object key = e.getKey();
+ Object value = e.getValue();
+ if (value == null) {
+ if (!(mo.get(key) == null && mo.containsKey(key)))
+ return (false);
+ } else {
+ if (!value.equals(mo.get(key)))
+ return (false);
+ }
+ }
+ return (true);
+ } else {
+ synchronized (map) {
+ if (mo.size() != map.size())
+ return (false);
+ Iterator i = map.entrySet().iterator();
+ while (i.hasNext()) {
+ Map.Entry e = (Map.Entry) i.next();
+ Object key = e.getKey();
+ Object value = e.getValue();
+ if (value == null) {
+ if (!(mo.get(key) == null && mo.containsKey(key)))
+ return (false);
+ } else {
+ if (!value.equals(mo.get(key)))
+ return (false);
+ }
+ }
+ return (true);
+ }
+ }
+
+ }
+
+
+ /**
* Return the value to which this map maps the specified key. Returns
* <code>null</code> if the map contains no mapping for this key, or if
* there is a mapping with a value of <code>null</code>. Use the
@@ -276,6 +356,32 @@
} else {
synchronized (map) {
return (map.get(key));
+ }
+ }
+
+ }
+
+
+ /**
+ * Return the hash code value for this map. This implementation uses
+ * exactly the code that is used to define the list hash function in the
+ * documentation for the <code>Map.hashCode</code> method.
+ */
+ public int hashCode() {
+
+ if (fast) {
+ int h = 0;
+ Iterator i = map.entrySet().iterator();
+ while (i.hasNext())
+ h += i.next().hashCode();
+ return (h);
+ } else {
+ synchronized (map) {
+ int h = 0;
+ Iterator i = map.entrySet().iterator();
+ while (i.hasNext())
+ h += i.next().hashCode();
+ return (h);
}
}
1.3 +113 -7 jakarta-struts/src/share/org/apache/struts/util/FastTreeMap.java
Index: FastTreeMap.java
===================================================================
RCS file:
/home/cvs/jakarta-struts/src/share/org/apache/struts/util/FastTreeMap.java,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- FastTreeMap.java 2001/02/12 00:32:13 1.2
+++ FastTreeMap.java 2001/05/20 01:15:18 1.3
@@ -1,7 +1,7 @@
/*
- * $Header:
/home/cvs/jakarta-struts/src/share/org/apache/struts/util/FastTreeMap.java,v 1.2
2001/02/12 00:32:13 craigmcc Exp $
- * $Revision: 1.2 $
- * $Date: 2001/02/12 00:32:13 $
+ * $Header:
/home/cvs/jakarta-struts/src/share/org/apache/struts/util/FastTreeMap.java,v 1.3
2001/05/20 01:15:18 craigmcc Exp $
+ * $Revision: 1.3 $
+ * $Date: 2001/05/20 01:15:18 $
*
* ====================================================================
*
@@ -68,6 +68,7 @@
import java.util.Comparator;
import java.util.Iterator;
import java.util.Map;
+import java.util.Map.Entry;
import java.util.Set;
import java.util.SortedMap;
import java.util.TreeMap;
@@ -95,14 +96,14 @@
* <code>java.util.TreeMap</code> directly (with no synchronization), for
* maximum performance.</p>
*
- * <p><strong>NOTE</strong>: The following methods are <strong>NOT</strong>
- * overridden: clone(), equals(Object), hashCode().</p>
+ * @deprecated At some point after Struts 1.0 final, will be replaced by
+ * an equivalent class in the Jakarta Commons Collections package.
*
* @author Craig R. McClanahan
- * @version $Revision: 1.2 $ $Date: 2001/02/12 00:32:13 $
+ * @version $Revision: 1.3 $ $Date: 2001/05/20 01:15:18 $
*/
-public class FastTreeMap implements Map, Cloneable, Serializable {
+public class FastTreeMap extends TreeMap {
// ----------------------------------------------------------- Constructors
@@ -210,6 +211,26 @@
/**
+ * Return a shallow copy of this <code>FastTreeMap</code> instance.
+ * The keys and values themselves are not copied.
+ */
+ public Object clone() {
+
+ FastTreeMap results = null;
+ if (fast) {
+ results = new FastTreeMap(map);
+ } else {
+ synchronized (map) {
+ results = new FastTreeMap(map);
+ }
+ }
+ results.setFast(getFast());
+ return (results);
+
+ }
+
+
+ /**
* Return the comparator used to order this map, or <code>null</code>
* if this map uses its keys' natural order.
*/
@@ -282,6 +303,65 @@
/**
+ * Compare the specified object with this list for equality. This
+ * implementation uses exactly the code that is used to define the
+ * list equals function in the documentation for the
+ * <code>Map.equals</code> method.
+ *
+ * @param o Object to be compared to this list
+ */
+ public boolean equals(Object o) {
+
+ // Simple tests that require no synchronization
+ if (o == this)
+ return (true);
+ else if (!(o instanceof Map))
+ return (false);
+ Map mo = (Map) o;
+
+ // Compare the two maps for equality
+ if (fast) {
+ if (mo.size() != map.size())
+ return (false);
+ Iterator i = map.entrySet().iterator();
+ while (i.hasNext()) {
+ Map.Entry e = (Map.Entry) i.next();
+ Object key = e.getKey();
+ Object value = e.getValue();
+ if (value == null) {
+ if (!(mo.get(key) == null && mo.containsKey(key)))
+ return (false);
+ } else {
+ if (!value.equals(mo.get(key)))
+ return (false);
+ }
+ }
+ return (true);
+ } else {
+ synchronized (map) {
+ if (mo.size() != map.size())
+ return (false);
+ Iterator i = map.entrySet().iterator();
+ while (i.hasNext()) {
+ Map.Entry e = (Map.Entry) i.next();
+ Object key = e.getKey();
+ Object value = e.getValue();
+ if (value == null) {
+ if (!(mo.get(key) == null && mo.containsKey(key)))
+ return (false);
+ } else {
+ if (!value.equals(mo.get(key)))
+ return (false);
+ }
+ }
+ return (true);
+ }
+ }
+
+ }
+
+
+ /**
* Return the first (lowest) key currently in this sorted map.
*/
public Object firstKey() {
@@ -312,6 +392,32 @@
} else {
synchronized (map) {
return (map.get(key));
+ }
+ }
+
+ }
+
+
+ /**
+ * Return the hash code value for this map. This implementation uses
+ * exactly the code that is used to define the list hash function in the
+ * documentation for the <code>Map.hashCode</code> method.
+ */
+ public int hashCode() {
+
+ if (fast) {
+ int h = 0;
+ Iterator i = map.entrySet().iterator();
+ while (i.hasNext())
+ h += i.next().hashCode();
+ return (h);
+ } else {
+ synchronized (map) {
+ int h = 0;
+ Iterator i = map.entrySet().iterator();
+ while (i.hasNext())
+ h += i.next().hashCode();
+ return (h);
}
}