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);
               }
           }
   
  
  
  

Reply via email to