This is the mail archive of the java-patches@gcc.gnu.org mailing list for the Java project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]

Patch: FYI: Updating classpath comparison


Yet another Classpath comparison checkin.

Tom

Index: ChangeLog
from  Tom Tromey  <tromey@redhat.com>

	* libgcj-classpath-compare.html: Rebuilt.

Index: libgcj-classpath-compare.html
===================================================================
RCS file: /cvs/gcc/wwwdocs/htdocs/java/libgcj-classpath-compare.html,v
retrieving revision 1.11
diff -u -r1.11 libgcj-classpath-compare.html
--- libgcj-classpath-compare.html 2001/10/08 21:11:32 1.11
+++ libgcj-classpath-compare.html 2001/10/16 16:37:20
@@ -9,7 +9,7 @@
 cvs Classpath.  It was generated using the <a
 href="scripts/gen-classpath-compare"><code>gen-classpath-compare</code></a>
 script on
-2001-10-08.
+2001-10-16.
 This table intentionally omits certain classes which are not of
 interest.  If the third column shows a "Diff" link, then that means
 the script believes that the class has been merged, but a difference
@@ -36,9 +36,9 @@
 <tr> <td>java.lang.Character</td> <td>Yes</td> <td>Yes</td> <td bgcolor="#eeeeaa">No</td> </tr>
 <tr> <td>java.lang.Class</td> <td>Yes</td> <td bgcolor="#eeeeaa">No</td> <td bgcolor="#eeeeaa">No</td> </tr>
 <tr> <td>java.lang.ClassLoader</td> <td>Yes</td> <td>Yes</td> <td bgcolor="#eeeeaa">No</td> </tr>
-<tr> <td>java.lang.Double</td> <td>Yes</td> <td>Yes</td> <td bgcolor="#eeeeaa">No</td> </tr>
+<tr> <td>java.lang.Double</td> <td>Yes</td> <td>Yes</td> <td bgcolor="#aaaaee"><a href="compare/java.lang.Double.diff">Diff</a></td> </tr>
 <tr> <td>java.lang.EcosProcess</td> <td>Yes</td> <td bgcolor="#eeeeaa">No</td> <td bgcolor="#eeeeaa">No</td> </tr>
-<tr> <td>java.lang.Float</td> <td>Yes</td> <td>Yes</td> <td bgcolor="#eeeeaa">No</td> </tr>
+<tr> <td>java.lang.Float</td> <td>Yes</td> <td>Yes</td> <td bgcolor="#aaaaee"><a href="compare/java.lang.Float.diff">Diff</a></td> </tr>
 <tr> <td>java.lang.Math</td> <td>Yes</td> <td>Yes</td> <td bgcolor="#eeeeaa">No</td> </tr>
 <tr> <td>java.lang.Object</td> <td>Yes</td> <td>Yes</td> <td bgcolor="#eeeeaa">No</td> </tr>
 <tr> <td>java.lang.Package</td> <td>Yes</td> <td>Yes</td> <td bgcolor="#aaaaee"><a href="compare/java.lang.Package.diff">Diff</a></td> </tr>
@@ -52,14 +52,12 @@
 <tr> <td>java.lang.VMClassLoader</td> <td>Yes</td> <td bgcolor="#eeeeaa">No</td> <td bgcolor="#eeeeaa">No</td> </tr>
 <tr> <td>java.lang.VMSecurityManager</td> <td>Yes</td> <td bgcolor="#eeeeaa">No</td> <td bgcolor="#eeeeaa">No</td> </tr>
 <tr> <td>java.lang.ref.Reference</td> <td>Yes</td> <td>Yes</td> <td bgcolor="#aaaaee"><a href="compare/java.lang.ref.Reference.diff">Diff</a></td> </tr>
-<tr> <td>java.lang.reflect.AccessibleObject</td> <td>Yes</td> <td bgcolor="#eeeeaa">No</td> <td bgcolor="#eeeeaa">No</td> </tr>
 <tr> <td>java.lang.reflect.Array</td> <td>Yes</td> <td>Yes</td> <td bgcolor="#eeeeaa">No</td> </tr>
 <tr> <td>java.lang.reflect.Constructor</td> <td>Yes</td> <td bgcolor="#eeeeaa">No</td> <td bgcolor="#eeeeaa">No</td> </tr>
 <tr> <td>java.lang.reflect.Field</td> <td>Yes</td> <td bgcolor="#eeeeaa">No</td> <td bgcolor="#eeeeaa">No</td> </tr>
 <tr> <td>java.lang.reflect.Method</td> <td>Yes</td> <td bgcolor="#eeeeaa">No</td> <td bgcolor="#eeeeaa">No</td> </tr>
 <tr> <td>java.math.BigInteger</td> <td>Yes</td> <td>Yes</td> <td bgcolor="#eeeeaa">No</td> </tr>
 <tr> <td>java.net.DatagramSocket</td> <td>Yes</td> <td>Yes</td> <td bgcolor="#eeeeaa">No</td> </tr>
-<tr> <td>java.net.DatagramSocketImpl</td> <td>Yes</td> <td>Yes</td> <td bgcolor="#eeeeaa">No</td> </tr>
 <tr> <td>java.net.HttpURLConnection</td> <td>Yes</td> <td>Yes</td> <td bgcolor="#eeeeaa">No</td> </tr>
 <tr> <td>java.net.InetAddress</td> <td>Yes</td> <td>Yes</td> <td bgcolor="#eeeeaa">No</td> </tr>
 <tr> <td>java.net.JarURLConnection</td> <td>Yes</td> <td>Yes</td> <td bgcolor="#eeeeaa">No</td> </tr>
@@ -69,7 +67,6 @@
 <tr> <td>java.net.PlainSocketImpl</td> <td>Yes</td> <td>Yes</td> <td bgcolor="#eeeeaa">No</td> </tr>
 <tr> <td>java.net.ServerSocket</td> <td>Yes</td> <td>Yes</td> <td bgcolor="#eeeeaa">No</td> </tr>
 <tr> <td>java.net.Socket</td> <td>Yes</td> <td>Yes</td> <td bgcolor="#eeeeaa">No</td> </tr>
-<tr> <td>java.net.SocketImpl</td> <td>Yes</td> <td>Yes</td> <td bgcolor="#eeeeaa">No</td> </tr>
 <tr> <td>java.net.SocketInputStream</td> <td bgcolor="#eeeeaa">No</td> <td>Yes</td> <td bgcolor="#eeeeaa">No</td> </tr>
 <tr> <td>java.net.SocketOutputStream</td> <td bgcolor="#eeeeaa">No</td> <td>Yes</td> <td bgcolor="#eeeeaa">No</td> </tr>
 <tr> <td>java.net.URL</td> <td>Yes</td> <td>Yes</td> <td bgcolor="#eeeeaa">No</td> </tr>
@@ -80,9 +77,7 @@
 <tr> <td>java.text.CollationKey</td> <td>Yes</td> <td>Yes</td> <td bgcolor="#eeeeaa">No</td> </tr>
 <tr> <td>java.text.Collator</td> <td>Yes</td> <td>Yes</td> <td bgcolor="#aaaaee"><a href="compare/java.text.Collator.diff">Diff</a></td> </tr>
 <tr> <td>java.text.RuleBasedCollator</td> <td>Yes</td> <td>Yes</td> <td bgcolor="#eeeeaa">No</td> </tr>
-<tr> <td>java.util.HashMap</td> <td>Yes</td> <td>Yes</td> <td bgcolor="#aaaaee"><a href="compare/java.util.HashMap.diff">Diff</a></td> </tr>
 <tr> <td>java.util.Hashtable</td> <td>Yes</td> <td>Yes</td> <td bgcolor="#aaaaee"><a href="compare/java.util.Hashtable.diff">Diff</a></td> </tr>
-<tr> <td>java.util.LinkedHashMap</td> <td bgcolor="#eeeeaa">No</td> <td>Yes</td> <td bgcolor="#eeeeaa">No</td> </tr>
 <tr> <td>java.util.TimeZone</td> <td>Yes</td> <td>Yes</td> <td bgcolor="#aaaaee"><a href="compare/java.util.TimeZone.diff">Diff</a></td> </tr>
 <tr> <td>java.util.prefs.AbstractPreferences</td> <td bgcolor="#eeeeaa">No</td> <td>Yes</td> <td bgcolor="#eeeeaa">No</td> </tr>
 <tr> <td>java.util.prefs.BackingStoreException</td> <td bgcolor="#eeeeaa">No</td> <td>Yes</td> <td bgcolor="#eeeeaa">No</td> </tr>
Index: compare/java.lang.Double.diff
===================================================================
RCS file: java.lang.Double.diff
diff -N java.lang.Double.diff
--- /dev/null	Tue May  5 13:32:27 1998
+++ compare/java.lang.Double.diff Tue Oct 16 09:37:20 2001
@@ -0,0 +1,66 @@
+--- /home/tromey/gnu/egcs/classpath/classpath/java/lang/Double.java	Fri Oct 12 10:11:36 2001
++++ java/lang/Double.java	Mon Oct 15 10:45:18 2001
+@@ -248,7 +248,11 @@
+    */
+   public static boolean isNaN (double v)
+   {
+-    return (doubleToLongBits (v) == 0x7ff8000000000000L);
++    long bits = doubleToLongBits (v);
++    long e = bits & 0x7ff0000000000000L;
++    long f = bits & 0x000fffffffffffffL;
++
++    return e == 0x7ff0000000000000L && f != 0L;
+   }
+ 
+   /**
+@@ -273,7 +277,10 @@
+    */
+   public static boolean isInfinite (double v)
+   {
+-    return (v == POSITIVE_INFINITY || v == NEGATIVE_INFINITY);
++    long bits = doubleToLongBits (v);
++    long f = bits & 0x7fffffffffffffffL;
++
++    return f == 0x7ff0000000000000L;
+   }
+ 
+   /**
+@@ -324,14 +331,14 @@
+       return isNaN (y) ? 0 : 1;
+     if (isNaN (y))
+       return -1;
+-    if ((x == 0.0d) && (y == -0.0d))
++    if (x == 0.0d && y == -0.0d)
+       return 1;
+-    if ((x == -0.0d) && (y == 0.0d))
++    if (x == -0.0d && y == 0.0d)
+       return -1;
+     if (x == y)
+       return 0;
+ 
+-    return (x > y) ? 1 : -1;
++    return x > y ? 1 : -1;
+   }
+ 
+   /**
+@@ -494,18 +501,12 @@
+    * @see #NEGATIVE_INFINITY
+    * @since 1.2
+    */
+-  public static double parseDouble (String s) throws NumberFormatException
+-  {
+-    String t = s.trim ();
+-      return parseDouble0 (t);
+-  }
+-
+-  private static native double parseDouble0 (String s)
++  public native static double parseDouble (String s) 
+     throws NumberFormatException;
+ 
+   /**
+    * Initialize JNI cache.  This method is called only by the 
+    * static initializer when using JNI.
+    */
+-  private static native void initIDs ();
++  private static void initIDs () { /* Not used in libgcj */ };
+ }
Index: compare/java.lang.Float.diff
===================================================================
RCS file: java.lang.Float.diff
diff -N java.lang.Float.diff
--- /dev/null	Tue May  5 13:32:27 1998
+++ compare/java.lang.Float.diff Tue Oct 16 09:37:20 2001
@@ -0,0 +1,59 @@
+--- /home/tromey/gnu/egcs/classpath/classpath/java/lang/Float.java	Fri Oct 12 10:11:36 2001
++++ java/lang/Float.java	Mon Oct 15 10:45:18 2001
+@@ -221,7 +221,12 @@
+    */
+   public boolean equals (Object obj)
+   {
+-    return (obj instanceof Float && ((Float) obj).value == value);
++    if (!(obj instanceof Float))
++      return false;
++
++    Float f = (Float) obj;
++
++    return floatToIntBits (value) == floatToIntBits (f.floatValue ());
+   }
+ 
+   /**
+@@ -359,7 +364,11 @@
+    */
+   public static boolean isNaN (float v)
+   {
+-    return (floatToIntBits (v) == 0x7fc00000);
++    int bits = floatToIntBits (v);
++    int e = bits & 0x7f800000;
++    int f = bits & 0x007fffff;
++
++    return e == 0x7f800000 && f != 0;
+   }
+ 
+   /**
+@@ -384,7 +393,10 @@
+    */
+   public static boolean isInfinite (float v)
+   {
+-    return (v == POSITIVE_INFINITY || v == NEGATIVE_INFINITY);
++    int bits = floatToIntBits (v);
++    int f = bits & 0x7fffffff;
++
++    return f == 0x7f800000;
+   }
+ 
+   /**
+@@ -469,14 +481,14 @@
+       return isNaN (y) ? 0 : 1;
+     if (isNaN (y))
+       return -1;
+-    if ((x == 0.0) && (y == -0.0))
++    if (x == 0.0 && y == -0.0)
+       return 1;
+-    if ((x == -0.0) && (y == 0.0))
++    if (x == -0.0 && y == 0.0)
+       return -1;
+     if (x == y)
+       return 0;
+ 
+-    return (x > y) ? 1 : -1;
++    return x > y ? 1 : -1;
+   }
+ 
+   /**
Index: compare/java.util.HashMap.diff
===================================================================
RCS file: java.util.HashMap.diff
diff -N java.util.HashMap.diff
--- compare/java.util.HashMap.diff Tue Oct 16 09:37:23 2001
+++ /dev/null	Tue May  5 13:32:27 1998
@@ -1,1182 +0,0 @@
---- /home/tromey/gnu/egcs/classpath/classpath/java/util/HashMap.java	Wed Sep 26 08:18:47 2001
-+++ java/util/HashMap.java	Wed Sep 26 18:20:56 2001
-@@ -1,6 +1,6 @@
- /* HashMap.java -- a class providing a basic hashtable data structure,
-    mapping Object --> Object
--   Copyright (C) 1998, 1999, 2000, 2001 Free Software Foundation, Inc.
-+   Copyright (C) 1998, 1999, 2000 Free Software Foundation, Inc.
- 
- This file is part of GNU Classpath.
- 
-@@ -37,154 +37,83 @@
- // a bug in here, chances are you should make a similar change to the Hashtable
- // code.
- 
--// NOTE: This implementation has some nasty coding style in order to
--// support LinkedHashMap, which extends this.
--
- /**
-  * This class provides a hashtable-backed implementation of the
-- * Map interface.
-- * <p>
-+ * Map interface.  
-  *
-- * It uses a hash-bucket approach; that is, hash collisions are handled
-- * by linking the new node off of the pre-existing node (or list of
-- * nodes).  In this manner, techniques such as linear probing (which
-- * can cause primary clustering) and rehashing (which does not fit very
-- * well with Java's method of precomputing hash codes) are avoided.
-- * <p>
-+ * It uses a hash-bucket approach; that is, hash
-+ * collisions are handled by linking the new node off of the
-+ * pre-existing node (or list of nodes).  In this manner, techniques 
-+ * such as linear probing (which can casue primary clustering) and 
-+ * rehashing (which does not fit very well with Java's method of 
-+ * precomputing hash codes) are avoided.  
-  *
-- * Under ideal circumstances (no collisions), HashMap offers O(1)
-+ * Under ideal circumstances (no collisions, HashMap offers O(1) 
-  * performance on most operations (<pre>containsValue()</pre> is,
-- * of course, O(n)).  In the worst case (all keys map to the same
-+ * of course, O(n)).  In the worst case (all keys map to the same 
-  * hash code -- very unlikely), most operations are O(n).
-- * <p>
-  *
-- * HashMap is part of the JDK1.2 Collections API.  It differs from
-+ * HashMap is part of the JDK1.2 Collections API.  It differs from 
-  * Hashtable in that it accepts the null key and null values, and it
-  * does not support "Enumeration views."
-- * <p>
-- *
-- * The iterators are <i>fail-fast</i>, meaning that any structural
-- * modification, except for <code>remove()</code> called on the iterator
-- * itself, cause the iterator to throw a
-- * <code>ConcurrentModificationException</code> rather than exhibit
-- * non-deterministic behavior.
-  *
-- * @author Jon Zeppieri
-- * @author Jochen Hoenicke
-- * @author Bryce McKinlay
-- * @author Eric Blake <ebb9@email.byu.edu>
-- * @see Object#hashCode()
-- * @see Collection
-- * @see Map
-- * @see TreeMap
-- * @see LinkedHashMap
-- * @see IdentityHashMap
-- * @see Hashtable
-- * @since 1.2
-+ * @author         Jon Zeppieri
-+ * @author         Jochen Hoenicke
-+ * @author	   Bryce McKinlay
-  */
- public class HashMap extends AbstractMap
-   implements Map, Cloneable, Serializable
- {
--  /**
--   * Default number of buckets. This is the value the JDK 1.3 uses. Some
--   * early documentation specified this value as 101. That is incorrect.
--   */
--  static final int DEFAULT_CAPACITY = 11;
--
--  /**
--   * The default load factor; this is explicitly specified by the spec.
--   */
--  static final float DEFAULT_LOAD_FACTOR = 0.75f;
--
--  /** "enum" of iterator types. */
--  static final int KEYS = 0,
--                   VALUES = 1,
--                   ENTRIES = 2;
-+  /** Default number of buckets. This is the value the JDK 1.3 uses. Some 
-+    * early documentation specified this value as 101. That is incorrect. */
-+  private static final int DEFAULT_CAPACITY = 11;  
-+  /** The defaulty load factor; this is explicitly specified by the spec. */
-+  private static final float DEFAULT_LOAD_FACTOR = 0.75f;
- 
--  /**
--   * Compatible with JDK 1.2.
--   */
-   private static final long serialVersionUID = 362498820763181265L;
- 
--  /**
--   * The rounded product of the capacity and the load factor; when the number
-+  /** 
-+   * The rounded product of the capacity and the load factor; when the number 
-    * of elements exceeds the threshold, the HashMap calls <pre>rehash()</pre>.
-    * @serial
-    */
-   int threshold;
- 
--  /**
--   * Load factor of this HashMap:  used in computing the threshold.
-+  /** Load factor of this HashMap:  used in computing the threshold.
-    * @serial
-    */
--  final float loadFactor;
-+  float loadFactor = DEFAULT_LOAD_FACTOR;
- 
--  /**
--   * Array containing the actual key-value mappings.
-+  /** 
-+   * Array containing the actual key-value mappings
-    */
--  transient HashEntry[] buckets;
-+  transient Entry[] buckets;
- 
--  /**
--   * Counts the number of modifications this HashMap has undergone, used
-+  /** 
-+   * counts the number of modifications this HashMap has undergone, used 
-    * by Iterators to know when to throw ConcurrentModificationExceptions.
-    */
-   transient int modCount;
- 
--  /**
--   * The size of this HashMap:  denotes the number of key-value pairs.
--   */
-+  /** the size of this HashMap:  denotes the number of key-value pairs */
-   transient int size;
- 
-   /**
-    * Class to represent an entry in the hash table. Holds a single key-value
--   * pair.  This is extended again in LinkedHashMap.  See {@link clone()}
--   * for why this must be Cloneable.
-+   * pair.
-    */
--  static class HashEntry extends BasicMapEntry implements Cloneable
-+  static class Entry extends BasicMapEntry
-   {
--    /** The next entry in the linked list. */
--    HashEntry next;
--
--    /**
--     * Simple constructor.
--     * @param key the key
--     * @param value the value
--     */
--    HashEntry(Object key, Object value)
-+    Entry next;
-+    
-+    Entry(Object key, Object value)
-     {
-       super(key, value);
-     }
--
--    /**
--     * Called when this entry is removed from the map. This version simply
--     * returns the value, but in LinkedHashMap, it must also do bookkeeping.
--     * @return the value of this key as it is removed
--     */
--    Object cleanup()
--    {
--      return value;
--    }
--
--    /**
--     * Clone this Entry.
--     * @return the cloned object
--     */
--    protected Object clone()
--    {
--      try
--        {
--          return super.clone();
--        }
--      catch (CloneNotSupportedException e)
--        {
--          // This is impossible.
--          return null;
--        }
--    }
-   }
- 
-   /**
--   * Construct a new HashMap with the default capacity (11) and the default
-+   * construct a new HashMap with the default capacity (11) and the default
-    * load factor (0.75).
-    */
-   public HashMap()
-@@ -193,278 +122,237 @@
-   }
- 
-   /**
--   * Construct a new HashMap from the given Map, with initial capacity
--   * the greater of the size of <code>m</code> or the default of 11.
--   * <p>
--   *
--   * Every element in Map m will be put into this new HashMap.
--   *
--   * @param m a Map whose key / value pairs will be put into
--   *          the new HashMap.  <b>NOTE: key / value pairs
--   *          are not cloned in this constructor.</b>
--   * @throws NullPointerException if m is null
-+   * construct a new HashMap from the given Map
-+   * 
-+   * every element in Map t will be put into this new HashMap
-+   *
-+   * @param     t        a Map whose key / value pairs will be put into
-+   *                     the new HashMap.  <b>NOTE: key / value pairs
-+   *                     are not cloned in this constructor</b>
-    */
-   public HashMap(Map m)
-   {
--    this(Math.max(m.size() * 2, DEFAULT_CAPACITY), DEFAULT_LOAD_FACTOR);
-+    int size = Math.max(m.size() * 2, DEFAULT_CAPACITY);
-+    buckets = new Entry[size];
-+    threshold = (int) (size * loadFactor);
-     putAll(m);
-   }
- 
-   /**
--   * Construct a new HashMap with a specific inital capacity and
--   * default load factor of 0.75.
-+   * construct a new HashMap with a specific inital capacity 
-+   *
-+   * @param   initialCapacity     the initial capacity of this HashMap (>=0)
-    *
--   * @param initialCapacity the initial capacity of this HashMap (>=0)
--   * @throws IllegalArgumentException if (initialCapacity < 0)
-+   * @throws   IllegalArgumentException    if (initialCapacity < 0)
-    */
--  public HashMap(int initialCapacity)
-+  public HashMap(int initialCapacity) throws IllegalArgumentException
-   {
-     this(initialCapacity, DEFAULT_LOAD_FACTOR);
-   }
- 
-   /**
--   * Construct a new HashMap with a specific inital capacity and load factor.
-+   * construct a new HashMap with a specific inital capacity and load factor
-    *
--   * @param initialCapacity the initial capacity (>=0)
--   * @param loadFactor the load factor (>0, not NaN)
--   * @throws IllegalArgumentException if (initialCapacity < 0) ||
--   *                                     ! (loadFactor > 0.0)
-+   * @param   initialCapacity  the initial capacity (>=0)
-+   * @param   loadFactor       the load factor
-+   * 
-+   * @throws   IllegalArgumentException    if (initialCapacity < 0) ||
-+   *                                          (loadFactor <= 0)
-    */
-   public HashMap(int initialCapacity, float loadFactor)
-+    throws IllegalArgumentException
-   {
-     if (initialCapacity < 0)
--      throw new IllegalArgumentException("Illegal Capacity: "
--                                         + initialCapacity);
--    if (! (loadFactor > 0)) // check for NaN too
--      throw new IllegalArgumentException("Illegal Load: " + loadFactor);
-+      throw new IllegalArgumentException("Illegal Initial Capacity: " 
-+      					 + initialCapacity);    
-+    if (loadFactor <= 0)
-+      throw new IllegalArgumentException("Illegal Load Factor: " + loadFactor);
- 
-     if (initialCapacity == 0)
-       initialCapacity = 1;
--    buckets = new HashEntry[initialCapacity];
-+    buckets = new Entry[initialCapacity];
-     this.loadFactor = loadFactor;
--    threshold = (int) (initialCapacity * loadFactor);
-+    this.threshold = (int) (initialCapacity * loadFactor);
-   }
- 
--  /**
--   * Returns the number of kay-value mappings currently in this Map
--   * @return the size
--   */
-+  /** returns the number of kay-value mappings currently in this Map */
-   public int size()
-   {
-     return size;
-   }
- 
--  /**
--   * Returns true if there are no key-value mappings currently in this Map
--   * @return <code>size() == 0</code>
--   */
-+  /** returns true if there are no key-value mappings currently in this Map */
-   public boolean isEmpty()
-   {
-     return size == 0;
-   }
- 
-   /**
--   * Returns true if this HashMap contains a value <pre>o</pre>, such that
-+   * returns true if this HashMap contains a value <pre>o</pre>, such that
-    * <pre>o.equals(value)</pre>.
-    *
--   * @param value the value to search for in this HashMap
--   * @return true if at least one key maps to the value
-+   * @param      value       the value to search for in this Hashtable
-    */
-   public boolean containsValue(Object value)
-   {
--    for (int i = buckets.length - 1; i >= 0; i--)
-+    for (int i = 0; i < buckets.length; i++)
-       {
--        HashEntry e = buckets[i];
--        while (e != null)
--          {
--            if (value == null ? e.value == null : value.equals(e.value))
--              return true;
--            e = e.next;
--          }
-+	Entry e = buckets[i];
-+	while (e != null)
-+	  {
-+	    if (value == null ? e.value == null : value.equals(e.value))
-+	      return true;
-+	    e = e.next;
-+	  }
-       }
-     return false;
-   }
- 
--  /**
--   * Returns true if the supplied object <pre>equals()</pre> a key
--   * in this HashMap.
-+  /** 
-+   * returns true if the supplied object equals (<pre>equals()</pre>) a key
-+   * in this HashMap 
-    *
--   * @param key the key to search for in this HashMap
--   * @return true if the key is in the table
--   * @see #containsValue(Object)
-+   * @param       key        the key to search for in this HashMap
-    */
-   public boolean containsKey(Object key)
-   {
-     int idx = hash(key);
--    HashEntry e = buckets[idx];
-+    Entry e = buckets[idx];
-     while (e != null)
-       {
-         if (key == null ? e.key == null : key.equals(e.key))
--          return true;
--        e = e.next;
-+	  return true;
-+	e = e.next;
-       }
-     return false;
-   }
- 
-   /**
--   * Return the value in this HashMap associated with the supplied key,
--   * or <pre>null</pre> if the key maps to nothing.  NOTE: Since the value
--   * could also be null, you must use containsKey to see if this key
--   * actually maps to something.
-+   * return the value in this Hashtable associated with the supplied key, or <pre>null</pre>
-+   * if the key maps to nothing
-    *
--   * @param key the key for which to fetch an associated value
--   * @return what the key maps to, if present
--   * @see #put(Object, Object)
--   * @see #containsKey(Object)
-+   * @param     key      the key for which to fetch an associated value
-    */
-   public Object get(Object key)
-   {
-     int idx = hash(key);
--    HashEntry e = buckets[idx];
-+    Entry e = buckets[idx];
-     while (e != null)
-       {
-         if (key == null ? e.key == null : key.equals(e.key))
--          return e.value;
--        e = e.next;
-+	  return e.value;
-+	e = e.next;
-       }
-     return null;
-   }
- 
-   /**
--   * Puts the supplied value into the Map, mapped by the supplied key.
--   * The value may be retrieved by any object which <code>equals()</code>
--   * this key. NOTE: Since the prior value could also be null, you must
--   * first use containsKey if you want to see if you are replacing the
--   * key's mapping.
-+   * puts the supplied value into the Map, mapped by the supplied key
-    *
--   * @param key the key used to locate the value
--   * @param value the value to be stored in the HashMap
--   * @return the prior mapping of the key, or null if there was none
--   * @see #get(Object)
--   * @see Object#equals(Object)
-+   * @param       key        the HashMap key used to locate the value
-+   * @param       value      the value to be stored in the HashMap
-    */
-   public Object put(Object key, Object value)
-   {
-     modCount++;
-     int idx = hash(key);
--    HashEntry e = buckets[idx];
--
-+    Entry e = buckets[idx];
-+    
-     while (e != null)
-       {
-         if (key == null ? e.key == null : key.equals(e.key))
--          // Must use this method for necessary bookkeeping in LinkedHashMap.
--          return e.setValue(value);
--        else
--          e = e.next;
-+	  {
-+	    Object r = e.value;
-+	    e.value = value;
-+	    return r;
-+	  }
-+	else
-+	  {
-+	    e = e.next;
-+	  }
-       }
--
-+    
-     // At this point, we know we need to add a new entry.
-     if (++size > threshold)
-       {
--        rehash();
--        // Need a new hash value to suit the bigger table.
--        idx = hash(key);
-+	rehash();
-+	// Need a new hash value to suit the bigger table.
-+	idx = hash(key);
-       }
- 
--    // LinkedHashMap cannot override put(), hence this call.
--    addEntry(key, value, idx);
--    return null;
--  }
--
--  /**
--   * Helper method for put, that creates and adds a new Entry.  This is
--   * overridden in LinkedHashMap for bookkeeping purposes.
--   *
--   * @param key the key of the new Entry
--   * @param value the value
--   * @param idx the index in buckets where the new Entry belongs
--   * @see #put(Object, Object)
--   */
--  void addEntry(Object key, Object value, int idx)
--  {
--    HashEntry e = new HashEntry(key, value);
--
-+    e = new Entry(key, value);
-+    
-     e.next = buckets[idx];
-     buckets[idx] = e;
-+    
-+    return null;
-   }
- 
-   /**
--   * Removes from the HashMap and returns the value which is mapped by the
--   * supplied key. If the key maps to nothing, then the HashMap remains
--   * unchanged, and <pre>null</pre> is returned. NOTE: Since the value
--   * could also be null, you must use containsKey to see if you are
--   * actually removing a mapping.
-+   * removes from the HashMap and returns the value which is mapped by the 
-+   * supplied key; if the key maps to nothing, then the HashMap remains unchanged,
-+   * and <pre>null</pre> is returned
-    *
--   * @param key the key used to locate the value to remove
--   * @return whatever the key mapped to, if present
-+   * @param    key     the key used to locate the value to remove from the HashMap
-    */
-   public Object remove(Object key)
-   {
-     modCount++;
-     int idx = hash(key);
--    HashEntry e = buckets[idx];
--    HashEntry last = null;
-+    Entry e = buckets[idx];
-+    Entry last = null;
- 
-     while (e != null)
-       {
-         if (key == null ? e.key == null : key.equals(e.key))
--          {
--            if (last == null)
--              buckets[idx] = e.next;
--            else
--              last.next = e.next;
--            size--;
--            // Method call necessary for LinkedHashMap to work correctly.
--            return e.cleanup();
--          }
--        last = e;
--        e = e.next;
-+	  {
-+	    if (last == null)
-+	      buckets[idx] = e.next;
-+	    else
-+	      last.next = e.next;
-+	    size--;
-+	    return e.value;
-+	  }
-+	last = e;
-+	e = e.next;
-       }
-     return null;
-   }
- 
--  /**
--   * Copies all elements of the given map into this hashtable.  If this table
--   * already has a mapping for a key, the new mapping replaces the current
--   * one.
--   *
--   * @param m the map to be hashed into this
--   */
-   public void putAll(Map m)
-   {
-+    int msize = m.size();
-     Iterator itr = m.entrySet().iterator();
--
--    for (int msize = m.size(); msize > 0; msize--)
-+    
-+    for (int i=0; i < msize; i++)
-       {
-         Map.Entry e = (Map.Entry) itr.next();
--        // Optimize in case the Entry is one of our own.
--        if (e instanceof BasicMapEntry)
--          {
--            BasicMapEntry entry = (BasicMapEntry) e;
--            put(entry.key, entry.value);
--          }
--        else
--          {
-+	// Optimize in case the Entry is one of our own.
-+	if (e instanceof BasicMapEntry)
-+	  {
-+	    BasicMapEntry entry = (BasicMapEntry) e;
-+	    put(entry.key, entry.value);
-+	  }
-+	else
-+	  {
-             put(e.getKey(), e.getValue());
--          }
-+	  }
-       }
-   }
--
--  /**
--   * Clears the Map so it has no keys. This is O(1).
--   */
-+  
-   public void clear()
-   {
-     modCount++;
--    Arrays.fill(buckets, null);
-+    for (int i=0; i < buckets.length; i++)
-+      {
-+        buckets[i] = null;
-+      }
-     size = 0;
-   }
- 
--  /**
--   * Returns a shallow clone of this HashMap. The Map itself is cloned,
--   * but its contents are not.  This is O(n).
--   *
--   * @return the clone
-+  /** 
-+   * returns a shallow clone of this HashMap (i.e. the Map itself is cloned, but
-+   * its contents are not)
-    */
-   public Object clone()
-   {
-@@ -475,66 +363,49 @@
-       }
-     catch (CloneNotSupportedException x)
-       {
--        // This is impossible.
-       }
--    copy.buckets = new HashEntry[buckets.length];
--
--    for (int i = buckets.length - 1; i >= 0; i--)
--      {
--        HashEntry e = buckets[i];
--        HashEntry last = null;
--
--        // Since LinkedHashMap does not override clone, we must clone
--        // the HashEntries to get the one of the correct type.
--        while (e != null)
--          {
--            if (last == null)
--              {
--                last = (HashEntry) e.clone();
--                copy.buckets[i] = last;
-+    copy.buckets = new Entry[buckets.length];
-+    
-+    for (int i=0; i < buckets.length; i++)
-+      {
-+        Entry e = buckets[i];
-+	Entry last = null;
-+	
-+	while (e != null)
-+	  {
-+	    if (last == null)
-+	      {
-+		copy.buckets[i] = new Entry(e.key, e.value);
-+		last = copy.buckets[i];
-               }
--            else
-+	    else		
-               {
--                last.next = (HashEntry) e.clone();
--                last = last.next;
--              }
--            e = e.next;
--          }
-+	        last.next = new Entry(e.key, e.value);
-+		last = last.next;
-+	      }
-+	    e = e.next;
-+	  }
-       }
--
--    // Perform extra bookkeeping required by LinkedHashMap.
--    if (this instanceof LinkedHashMap)
--      ((LinkedHashMap) this).rethread();
--
-     return copy;
-   }
- 
--  /**
--   * Returns a "set view" of this HashMap's keys. The set is backed by the
--   * HashMap, so changes in one show up in the other.  The set supports
--   * element removal, but not element addition.
--   *
--   * @return a set view of the keys
--   * @see #values()
--   * @see #entrySet()
--   */
-+  /** returns a "set view" of this HashMap's keys */
-   public Set keySet()
-   {
--    // Create an AbstractSet with custom implementations of those methods that
--    // can be overridden easily and efficiently.
-+    // Create an AbstractSet with custom implementations of those methods that 
-+    // can be overriden easily and efficiently.
-     return new AbstractSet()
-     {
-       public int size()
-       {
-         return size;
-       }
--
-+      
-       public Iterator iterator()
-       {
--        // Cannot create the iterator directly, because of LinkedHashMap.
--        return HashMap.this.iterator(KEYS);
-+        return new HashIterator(HashIterator.KEYS);
-       }
--
-+            
-       public void clear()
-       {
-         HashMap.this.clear();
-@@ -544,29 +415,20 @@
-       {
-         return HashMap.this.containsKey(o);
-       }
--
-+      
-       public boolean remove(Object o)
-       {
-         // Test against the size of the HashMap to determine if anything
--        // really got removed. This is neccessary because the return value of
--        // HashMap.remove() is ambiguous in the null case.
-+	// really got removed. This is neccessary because the return value of
-+	// HashMap.remove() is ambiguous in the null case.
-         int oldsize = size;
-         HashMap.this.remove(o);
--        return (oldsize != size);
-+	return (oldsize != size);
-       }
-     };
-   }
--
--  /**
--   * Returns a "collection view" (or "bag view") of this HashMap's values.
--   * The collection is backed by the HashMap, so changes in one show up
--   * in the other.  The collection supports element removal, but not element
--   * addition.
--   *
--   * @return a bag view of the values
--   * @see #keySet()
--   * @see #entrySet()
--   */
-+  
-+  /** Returns a "collection view" (or "bag view") of this HashMap's values. */
-   public Collection values()
-   {
-     // We don't bother overriding many of the optional methods, as doing so
-@@ -577,13 +439,12 @@
-       {
-         return size;
-       }
--
-+      
-       public Iterator iterator()
-       {
--        // Cannot create the iterator directly, because of LinkedHashMap.
--        return HashMap.this.iterator(VALUES);
-+        return new HashIterator(HashIterator.VALUES);
-       }
--
-+      
-       public void clear()
-       {
-         HashMap.this.clear();
-@@ -591,37 +452,23 @@
-     };
-   }
- 
--  /**
--   * Returns a "set view" of this HashMap's entries. The set is backed by
--   * the HashMap, so changes in one show up in the other.  The set supports
--   * element removal, but not element addition.
--   * <p>
--   *
--   * Note that the iterators for all three views, from keySet(), entrySet(),
--   * and values(), traverse the HashMap in the same sequence.
--   *
--   * @return a set view of the entries
--   * @see #keySet()
--   * @see #values()
--   * @see Map.Entry
--   */
-+  /** Returns a "set view" of this HashMap's entries. */
-   public Set entrySet()
-   {
--    // Create an AbstractSet with custom implementations of those methods that
--    // can be overridden easily and efficiently.
-+    // Create an AbstractSet with custom implementations of those methods that 
-+    // can be overriden easily and efficiently.
-     return new AbstractSet()
-     {
-       public int size()
-       {
-         return size;
-       }
--
-+      
-       public Iterator iterator()
-       {
--        // Cannot create the iterator directly, because of LinkedHashMap.
--        return HashMap.this.iterator(ENTRIES);
-+        return new HashIterator(HashIterator.ENTRIES);
-       }
--
-+            
-       public void clear()
-       {
-         HashMap.this.clear();
-@@ -629,166 +476,143 @@
- 
-       public boolean contains(Object o)
-       {
--        return getEntry(o) != null;
-+        if (!(o instanceof Map.Entry))
-+	  return false;
-+	Map.Entry me = (Map.Entry) o;
-+	Entry e = getEntry(me);
-+	return (e != null);
-       }
--
-+      
-       public boolean remove(Object o)
-       {
--        HashEntry e = getEntry(o);
--        if (e != null)
--          {
--            HashMap.this.remove(e.key);
--            return true;
--          }
--        return false;
-+        if (!(o instanceof Map.Entry))
-+	  return false;
-+	Map.Entry me = (Map.Entry) o;
-+	Entry e = getEntry(me);
-+	if (e != null)
-+	  {
-+	    HashMap.this.remove(e.key);
-+	    return true;
-+	  }
-+	return false;
-       }
-     };
-   }
--
--  /** Helper method that returns an index in the buckets array for `key;
--   * based on its hashCode().
--   *
--   * @param key the key
--   * @return the bucket number
--   */
--  int hash(Object key)
--  {
--    return (key == null) ? 0 : Math.abs(key.hashCode() % buckets.length);
-+  
-+  /** Return an index in the buckets array for `key' based on its hashCode() */
-+  private int hash(Object key)
-+  {
-+    if (key == null)
-+      return 0;
-+    else
-+      return Math.abs(key.hashCode() % buckets.length);
-   }
- 
--  /**
--   * Helper method for entrySet(), which matches both key and value
--   * simultaneously.
--   *
--   * @param o the entry to match
--   * @return the matching entry, if found, or null
--   * @see #entrySet()
--   */
--  private HashEntry getEntry(Object o)
--  {
--    if (!(o instanceof Map.Entry))
--      return null;
--    Map.Entry me = (Map.Entry) o;
-+  /** Return an Entry who's key and value equal the supplied Map.Entry. 
-+    * This is used by entrySet's contains() and remove() methods. They can't
-+    * use contains(key) and remove(key) directly because that would result
-+    * in entries with the same key but a different value being matched. */
-+  private Entry getEntry(Map.Entry me)
-+  {
-     int idx = hash(me.getKey());
--    HashEntry e = buckets[idx];
-+    Entry e = buckets[idx];
-     while (e != null)
-       {
-         if (e.equals(me))
--          return e;
--        e = e.next;
-+	  return e;
-+	e = e.next;
-       }
-     return null;
-   }
--
--  /**
--   * Increases the size of the HashMap and rehashes all keys to new array
--   * indices; this is called when the addition of a new value would cause
--   * size() > threshold. Note that the existing Entry objects are reused in
-+  
-+  /** 
-+   * increases the size of the HashMap and rehashes all keys to new array 
-+   * indices; this is called when the addition of a new value would cause 
-+   * size() > threshold. Note that the existing Entry objects are reused in 
-    * the new hash table.
--   * <p>
--   *
--   * This is not specified, but the new size is twice the current size plus
--   * one; this number is not always prime, unfortunately.
-    */
-   private void rehash()
-   {
--    HashEntry[] oldBuckets = buckets;
--
-+    Entry[] oldBuckets = buckets;
-+    
-     int newcapacity = (buckets.length * 2) + 1;
-     threshold = (int) (newcapacity * loadFactor);
--    buckets = new HashEntry[newcapacity];
--
--    for (int i = oldBuckets.length - 1; i >= 0; i--)
-+    buckets = new Entry[newcapacity];
-+    
-+    for (int i = 0; i < oldBuckets.length; i++)
-       {
--        HashEntry e = oldBuckets[i];
-+	Entry e = oldBuckets[i];
-         while (e != null)
--          {
--            int idx = hash(e.key);
--            HashEntry dest = buckets[idx];
--
--            if (dest != null)
--              {
--                while (dest.next != null)
--                  dest = dest.next;
--                dest.next = e;
--              }
--            else
--              {
--                buckets[idx] = e;
--              }
--
--            HashEntry next = e.next;
--            e.next = null;
--            e = next;
--          }
-+	  {
-+	    int idx = hash(e.key);
-+	    Entry dest = buckets[idx];
-+
-+	    if (dest != null)
-+	      {
-+		while (dest.next != null)
-+        	  dest = dest.next;
-+		dest.next = e;
-+	      }
-+	    else
-+	      {
-+        	buckets[idx] = e;
-+	      }
-+
-+	    Entry next = e.next;
-+	    e.next = null;
-+	    e = next;
-+	  }
-       }
-   }
- 
-   /**
--   * Generates a parameterized iterator.  Must be overrideable, since
--   * LinkedHashMap iterates in a different order.
--   * @param type {@link #KEYS}, {@link #VALUES}, or {@link #ENTRIES}
--   * @return the appropriate iterator
--   */
--  Iterator iterator(int type)
--  {
--    return new HashIterator(type);
--  }
--
--  /**
-    * Serializes this object to the given stream.
--   *
--   * @param s the stream to write to
--   * @throws IOException if the underlying stream fails
--   * @serialData the <i>capacity</i>(int) that is the length of the
--   *             bucket array, the <i>size</i>(int) of the hash map
--   *             are emitted first.  They are followed by size entries,
--   *             each consisting of a key (Object) and a value (Object).
-+   * @serialdata the <i>capacity</i>(int) that is the length of the
-+   * bucket array, the <i>size</i>(int) of the hash map are emitted
-+   * first.  They are followed by size entries, each consisting of
-+   * a key (Object) and a value (Object).
-    */
-   private void writeObject(ObjectOutputStream s) throws IOException
-   {
--    // Write the threshold and loadFactor fields.
-+    // the threshold and loadFactor fields
-     s.defaultWriteObject();
- 
-     s.writeInt(buckets.length);
-     s.writeInt(size);
--    // Avoid creating a wasted Set by creating the iterator directly.
--    Iterator it = iterator(ENTRIES);
-+    Iterator it = entrySet().iterator();
-     while (it.hasNext())
-       {
--        HashEntry entry = (HashEntry) it.next();
--        s.writeObject(entry.key);
--        s.writeObject(entry.value);
-+	Map.Entry entry = (Map.Entry) it.next();
-+	s.writeObject(entry.getKey());
-+	s.writeObject(entry.getValue());
-       }
-   }
- 
-   /**
-    * Deserializes this object from the given stream.
--   *
--   * @param s the stream to read from
--   * @throws ClassNotFoundException if the underlying stream fails
--   * @throws IOException if the underlying stream fails
--   * @serialData the <i>capacity</i>(int) that is the length of the
--   *             bucket array, the <i>size</i>(int) of the hash map
--   *             are emitted first.  They are followed by size entries,
--   *             each consisting of a key (Object) and a value (Object).
-+   * @serialdata the <i>capacity</i>(int) that is the length of the
-+   * bucket array, the <i>size</i>(int) of the hash map are emitted
-+   * first.  They are followed by size entries, each consisting of
-+   * a key (Object) and a value (Object).
-    */
-   private void readObject(ObjectInputStream s)
-     throws IOException, ClassNotFoundException
-   {
--    // Read the threshold and loadFactor fields.
-+    // the threshold and loadFactor fields
-     s.defaultReadObject();
- 
--    // Read and use capacity.
--    buckets = new HashEntry[s.readInt()];
-+    int capacity = s.readInt();
-     int len = s.readInt();
--    // Already happens automatically.
--    // size = 0;
--    // modCount = 0;
--
--    // Read and use key/value pairs.
--    for ( ; len > 0; len--)
--      put(s.readObject(), s.readObject());
-+    size = 0;
-+    modCount = 0;
-+    buckets = new Entry[capacity];
-+
-+    for (int i = 0; i < len; i++)
-+      {
-+	Object key = s.readObject();
-+	Object value = s.readObject();
-+	put(key, value);
-+      }
-   }
- 
-   /**
-@@ -796,70 +620,64 @@
-    * This implementation is parameterized to give a sequential view of
-    * keys, values, or entries.
-    *
--   * @author Jon Zeppieri
-+   * @author       Jon Zeppieri
-    */
-   class HashIterator implements Iterator
-   {
--    /**
--     * The type of this Iterator: {@link #KEYS}, {@link #VALUES},
--     * or {@link #ENTRIES}.
--     */
--    final int type;
--    /**
--     * The number of modifications to the backing HashMap that we know about.
--     */
--    int knownMod = modCount;
--    /** The number of elements remaining to be returned by next(). */
--    int count = size;
--    /** Current index in the physical hash table. */
--    int idx = buckets.length;
--    /** The last Entry returned by a next() call. */
--    HashEntry last;
--    /**
--     * The next entry that should be returned by next(). It is set to something
--     * if we're iterating through a bucket that contains multiple linked
--     * entries. It is null if next() needs to find a new bucket.
--     */
--    HashEntry next;
-+    static final int KEYS = 0,
-+                     VALUES = 1,
-+		     ENTRIES = 2;
-+		    
-+    // the type of this Iterator: KEYS, VALUES, or ENTRIES.
-+    int type;
-+    // the number of modifications to the backing Hashtable that we know about.
-+    int knownMod;
-+    // The total number of elements returned by next(). Used to determine if
-+    // there are more elements remaining.
-+    int count;
-+    // Current index in the physical hash table.
-+    int idx;
-+    // The last Entry returned by a next() call.
-+    Entry last;
-+    // The next entry that should be returned by next(). It is set to something
-+    // if we're iterating through a bucket that contains multiple linked 
-+    // entries. It is null if next() needs to find a new bucket.
-+    Entry next;
- 
--    /**
--     * Construct a new HashIterator with the supplied type.
--     * @param type {@link #KEYS}, {@link #VALUES}, or {@link #ENTRIES}
--     */
-+    /* construct a new HashtableIterator with the supllied type: 
-+       KEYS, VALUES, or ENTRIES */
-     HashIterator(int type)
-     {
-       this.type = type;
-+      knownMod = HashMap.this.modCount;
-+      count = 0;
-+      idx = buckets.length;
-     }
- 
--    /**
--     * Returns true if the Iterator has more elements.
--     * @return true if there are more elements
--     * @throws ConcurrentModificationException if the HashMap was modified
--     */
-+    /** returns true if the Iterator has more elements */
-     public boolean hasNext()
-     {
--      if (knownMod != modCount)
--        throw new ConcurrentModificationException();
--      return count > 0;
-+      if (knownMod != HashMap.this.modCount)
-+	throw new ConcurrentModificationException();
-+      return count < size;
-     }
- 
--    /**
--     * Returns the next element in the Iterator's sequential view.
--     * @return the next element
--     * @throws ConcurrentModificationException if the HashMap was modified
--     * @throws NoSuchElementException if there is none
--     */
-+    /** returns the next element in the Iterator's sequential view */
-     public Object next()
-     {
--      if (knownMod != modCount)
--        throw new ConcurrentModificationException();
--      if (count == 0)
-+      if (knownMod != HashMap.this.modCount)
-+	throw new ConcurrentModificationException();
-+      if (count == size)
-         throw new NoSuchElementException();
--      count--;
--      HashEntry e = next;
-+      count++;
-+      Entry e = null;
-+      if (next != null)
-+        e = next;
- 
-       while (e == null)
--        e = buckets[--idx];
-+        {
-+	  e = buckets[--idx];
-+	}
- 
-       next = e.next;
-       last = e;
-@@ -870,22 +688,25 @@
-       return e;
-     }
- 
--    /**
--     * Removes from the backing HashMap the last element which was fetched
--     * with the <pre>next()</pre> method.
--     * @throws ConcurrentModificationException if the HashMap was modified
--     * @throws IllegalStateException if called when there is no last element
-+    /** 
-+     * removes from the backing HashMap the last element which was fetched with the
-+     * <pre>next()</pre> method
-      */
-     public void remove()
-     {
--      if (knownMod != modCount)
--        throw new ConcurrentModificationException();
-+      if (knownMod != HashMap.this.modCount)
-+	throw new ConcurrentModificationException();
-       if (last == null)
--        throw new IllegalStateException();
--
--      HashMap.this.remove(last.key);
--      knownMod++;
--      last = null;
-+	{
-+	  throw new IllegalStateException();
-+	}
-+      else
-+	{
-+	  HashMap.this.remove(last.key);
-+	  knownMod++;
-+	  count--;
-+	  last = null;
-+	}
-     }
-   }
- }
Index: compare/java.util.Hashtable.diff
===================================================================
RCS file: /cvs/gcc/wwwdocs/htdocs/java/compare/java.util.Hashtable.diff,v
retrieving revision 1.3
diff -u -r1.3 java.util.Hashtable.diff
--- compare/java.util.Hashtable.diff 2001/09/27 00:31:11 1.3
+++ compare/java.util.Hashtable.diff 2001/10/16 16:37:23
@@ -1,5 +1,5 @@
 --- /home/tromey/gnu/egcs/classpath/classpath/java/util/Hashtable.java	Wed Sep 26 08:18:47 2001
-+++ java/util/Hashtable.java	Wed Sep 26 18:20:56 2001
++++ java/util/Hashtable.java	Tue Oct 16 09:16:18 2001
 @@ -1,6 +1,6 @@
  /* Hashtable.java -- a class providing a basic hashtable data structure,
     mapping Object --> Object
Index: compare/java.util.TimeZone.diff
===================================================================
RCS file: /cvs/gcc/wwwdocs/htdocs/java/compare/java.util.TimeZone.diff,v
retrieving revision 1.3
diff -u -r1.3 java.util.TimeZone.diff
--- compare/java.util.TimeZone.diff 2001/09/26 17:37:44 1.3
+++ compare/java.util.TimeZone.diff 2001/10/16 16:37:23
@@ -1,5 +1,5 @@
 --- /home/tromey/gnu/egcs/classpath/classpath/java/util/TimeZone.java	Wed Sep 26 08:18:48 2001
-+++ java/util/TimeZone.java	Fri Sep 14 19:24:23 2001
++++ java/util/TimeZone.java	Tue Oct 16 09:16:19 2001
 @@ -27,7 +27,6 @@
  
  package java.util;


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]