From 3a73757880cde4912de947d746e2fea7a4bbd0e8 Mon Sep 17 00:00:00 2001
From: Bryce McKinlay <bryce@albatross.co.nz>
Date: Sun, 29 Oct 2000 05:06:10 +0000
Subject: AbstractCollection.java (addAll): Use size() instead of hasNext() in
 iterator loop.

2000-10-29  Bryce McKinlay  <bryce@albatross.co.nz>

	* java/util/AbstractCollection.java (addAll): Use size() instead of
	hasNext() in iterator loop.
	(clear): Ditto.
	(contains): Ditto. Simplify loop.
	(containsAll): Ditto.
	(remove): Ditto.
	(removeAll): Ditto.
	(retainAll): Ditto.
	(toArray): Ditto.
	(toString): Ditto. Use string concatenation operators, not
	StringBuffer.
	* java/util/AbstractList.java (addAll): Use size() instead of
	hasNext() in iterator loop.
	(equals): Ditto.
	(hashCode): Ditto.
	(indexOf): Ditto. Don't take null check outside of the loop.
	(iterator): Return an AbstractListItr instead of anonymous class.
	(lastIndexOf): Use a for loop bounded by size() instead of
	hasPrevious() in iterator loop.
	(listIterator): Return an AbstractListItr.
	(removeRange): Remove bounds checking code and docs.
	(AbstractListItr): New inner class. Code moved here from
	listIterator().
	(SubList.iterator): Removed. Use default implementation from
	AbstractList instead.
	(SubList.listIterator): As above.
	* java/util/AbstractMap.java (clear): Use a for loop bounded by size()
	instead of hasNext() in iterator loop.
	(containsValue): Ditto.
	(equals): Ditto.
	(get): Ditto.
	(put): Ditto.
	(putAll): Ditto.
	(remove): Ditto.
	(toString): Ditto. Use string concatenation operators, not
	StringBuffer.
	* java/util/AbstractSequentialList.java (addAll): Use a for loop
	bounded by size() instead of hasNext() in iterator loop.
	* java/util/AbstractSet.java (hashCode): Don't catch exception as
	part of normal execution flow. Do an explicit null check instead.
	* java/util/ArrayList.java (_iSize): Rename to `size'.
	(_arData): Rename to `data'.
	(get): Check lower bounds also. Simplify IndexOutOfBoundsException
	message.
	(remove): Ditto.
	(removeRange): Make protected. Don't check bounds.
	(add): Check lower bounds also. Simplify IndexOutOfBoundsException
	message.
	(addAll (Collection)): Use a size-bounded for loop instead of hasNext()
	check.
	(addAll (int, Collection)): Check lower bounds. Simplify exception
	string.
	(clone): Clone the data array too.
	(indexOf): Inline doesEqual().
	(lastIndexOf): Ditto.
	(clear): Don't set array data to null.
	(set): Check lower bounds. Simplify exception string.
	(toArray): Correct comment.
	(trimToSize): Don't update modCount, this is not a structural change.
	Add comment.

	* java/util/BitSet.java: Merged with classpath, new JDK 1.2 methods
	implemented.
	(toString): Declare `bit' as long, not int.
	(data): Made package-private, not private.

From-SVN: r37116
---
 libjava/java/util/AbstractMap.java | 263 ++++++++++++++++++-------------------
 1 file changed, 131 insertions(+), 132 deletions(-)

(limited to 'libjava/java/util/AbstractMap.java')

diff --git a/libjava/java/util/AbstractMap.java b/libjava/java/util/AbstractMap.java
index 4935afe..c4f9df0 100644
--- a/libjava/java/util/AbstractMap.java
+++ b/libjava/java/util/AbstractMap.java
@@ -7,7 +7,7 @@ GNU Classpath is free software; you can redistribute it and/or modify
 it under the terms of the GNU General Public License as published by
 the Free Software Foundation; either version 2, or (at your option)
 any later version.
- 
+
 GNU Classpath is distributed in the hope that it will be useful, but
 WITHOUT ANY WARRANTY; without even the implied warranty of
 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
@@ -31,88 +31,90 @@ executable file might be covered by the GNU General Public License. */
 
 package java.util;
 
-public abstract class AbstractMap implements Map {
-  
+public abstract class AbstractMap implements Map
+{
+  /**
+   * Remove all entries from this Map. This default implementation calls
+   * entrySet().clear().
+   *
+   * @throws UnsupportedOperationException
+   * @specnote The JCL book claims that this implementation always throws 
+   *           UnsupportedOperationException, while the online docs claim it
+   *           calls entrySet().clear(). We take the later to be correct.
+   */
   public void clear()
   {
     entrySet().clear();
   }
 
-  public boolean containsKey( Object key )
+  public boolean containsKey(Object key)
   {
     Object k;
-    Iterator entries = entrySet().iterator();
-  
-    while( entries.hasNext() )
-    {
-      k = ((Map.Entry)entries.next()).getKey();
-      if( key == null ? k == null : key.equals( k ) )
-	return true;
-    }
-
+    Set es = entrySet();
+    Iterator entries = es.iterator();
+    int size = size();
+    for (int pos = 0; pos < size; pos++)
+      {
+	k = ((Map.Entry) entries.next()).getKey();
+	if (key == null ? k == null : key.equals(k))
+	  return true;
+      }
     return false;
   }
 
-  public boolean containsValue( Object value )
+  public boolean containsValue(Object value)
   {
     Object v;
-    Iterator entries = entrySet().iterator();
-  
-    while( entries.hasNext() )
-    {
-      v = ((Map.Entry)entries.next()).getValue();
-      if( value == null ? v == null : value.equals( v ) )
-	return true;
-    }
-
-    return false; 
+    Set es = entrySet();
+    Iterator entries = es.iterator();
+    int size = size();
+    for (int pos = 0; pos < size; pos++)
+      {
+	v = ((Map.Entry) entries.next()).getValue();
+	if (value == null ? v == null : value.equals(v))
+	  return true;
+      }
+    return false;
   }
 
   public abstract Set entrySet();
 
-  public boolean equals( Object o )
+  public boolean equals(Object o)
   {
-    if( this == o )
+    if (o == this)
       return true;
-    
-    if( o == null || !( o instanceof Map ) )
+    if (!(o instanceof Map))
       return false;
-    
-    Map m = (Map)o;
-    if( m.size() != size() )
+
+    Map m = (Map) o;
+    Set s = m.entrySet();
+    Iterator itr = entrySet().iterator();
+    int size = size();
+
+    if (m.size() != size)
       return false;
-    
-    Object key, value1, value2;
-    Map.Entry entry;
-    Iterator entries = entrySet().iterator();
-    while( entries.hasNext() )
-    {
-      entry = (Map.Entry)entries.next();
-      key = entry.getKey();
-      value1 = entry.getValue();
-      value2 = m.get( key );
-      
-      if( !( ( value1 == null && value2 == null )
-	     || value1.equals( value2 ) ) )
-	return false;
-    }
-
-    return true;    
+
+    for (int pos = 0; pos < size; pos++)
+      {
+	if (!s.contains(itr.next()))
+	  return false;
+      }
+    return true;
   }
 
-  public Object get( Object key )
+  public Object get(Object key)
   {
-    Object k;
-    Map.Entry entry;
-    Iterator entries = entrySet().iterator();
-  
-    while( entries.hasNext() )
-    {
-      entry = (Map.Entry)entries.next();
-      k = entry.getKey();
-      if( key == null ? k == null : key.equals( k ) )
-	return entry.getValue();
-    }
+    Set s = entrySet();
+    Iterator entries = s.iterator();
+    int size = size();
+
+    for (int pos = 0; pos < size; pos++)
+      {
+	Map.Entry entry = (Map.Entry) entries.next();
+	Object k = entry.getKey();
+	if (key == null ? k == null : key.equals(k))
+	  return entry.getValue();
+      }
 
     return null;
   }
@@ -120,11 +122,12 @@ public abstract class AbstractMap implements Map {
   public int hashCode()
   {
     int hashcode = 0;
-    Iterator entries = entrySet().iterator();
-  
-    while( entries.hasNext() )
-      hashcode += entries.next().hashCode();
-
+    Iterator itr = entrySet().iterator();
+    int size = size();
+    for (int pos = 0; pos < size; pos++)
+      {
+	hashcode += itr.next().hashCode();
+      }
     return hashcode;
   }
 
@@ -135,13 +138,12 @@ public abstract class AbstractMap implements Map {
 
   public Set keySet()
   {
-    if( this.keySet == null )
-    {
-      this.keySet =
-	new AbstractSet()
+    if (this.keySet == null)
+      {
+	this.keySet = new AbstractSet()
 	{
 	  public int size()
-          {
+	  {
 	    return AbstractMap.this.size();
 	  }
 
@@ -149,70 +151,71 @@ public abstract class AbstractMap implements Map {
 	  {
 	    return AbstractMap.this.containsKey(key);
 	  }
-	  
+
 	  public Iterator iterator()
-          {
+	  {
 	    return new Iterator()
-            {
+	    {
 	      Iterator map_iterator = AbstractMap.this.entrySet().iterator();
-	      
+
 	      public boolean hasNext()
-              {
+	      {
 		return map_iterator.hasNext();
 	      }
 
 	      public Object next()
-              {
-		return ((Map.Entry)map_iterator.next()).getKey();
+	      {
+		return ((Map.Entry) map_iterator.next()).getKey();
 	      }
-	      
+
 	      public void remove()
-              {
+	      {
 		map_iterator.remove();
 	      }
 	    };
 	  }
 	};
-    }
-    
-    return this.keySet;    
+      }
+
+    return this.keySet;
   }
 
-  public Object put( Object key, Object value )
+  public Object put(Object key, Object value)
   {
     throw new UnsupportedOperationException();
   }
 
-  public void putAll( Map m )
+  public void putAll(Map m)
   {
     Map.Entry entry;
     Iterator entries = m.entrySet().iterator();
-    while( entries.hasNext() )
-    {
-      entry = (Map.Entry)entries.next();
-      put( entry.getKey(), entry.getValue() );
-    }
+    int size = m.size();
+
+    for (int pos = 0; pos < size; pos++)
+      {
+	entry = (Map.Entry) entries.next();
+	put(entry.getKey(), entry.getValue());
+      }
   }
 
-  public Object remove( Object key )
+  public Object remove(Object key)
   {
-    Object k, value;
-    Map.Entry entry;
     Iterator entries = entrySet().iterator();
-  
-    while( entries.hasNext() )
-    {
-      entry = (Map.Entry)entries.next();
-      k = entry.getKey();
-      if( key == null ? k == null : key.equals( k ) )
+    int size = size();
+
+    for (int pos = 0; pos < size; pos++)
       {
-	value = entry.getValue();
-	entries.remove();
-	return value;
+	Map.Entry entry = (Map.Entry) entries.next();
+	Object k = entry.getKey();
+	if (key == null ? k == null : key.equals(k))
+	  {
+	    Object value = entry.getValue();
+	    entries.remove();
+	    return value;
+	  }
       }
-    }
 
-    return null;    
+    return null;
   }
 
   public int size()
@@ -222,62 +225,58 @@ public abstract class AbstractMap implements Map {
 
   public String toString()
   {
-    StringBuffer sb = new StringBuffer("{");
-    String comma = "";
     Iterator entries = entrySet().iterator();
-  
-    while( entries.hasNext() )
-    {
-      Map.Entry entry = (Map.Entry)entries.next();
-      sb.append(comma).append(entry.getKey())
-	.append('=').append(entry.getValue());
-      comma = ", ";
-    }
-
-    return sb.append('}').toString();
+    int size = size();
+    String r = "{";
+    for (int pos = 0; pos < size; pos++)
+      {
+	r += entries.next();
+	if (pos < size - 1)
+	  r += ", ";
+      }
+    r += "}";
+    return r;
   }
 
   public Collection values()
   {
-    if( this.valueCollection == null )
-    {
-      this.valueCollection =
-	new AbstractCollection()
+    if (this.valueCollection == null)
+      {
+	this.valueCollection = new AbstractCollection()
 	{
 	  public int size()
-          {
+	  {
 	    return AbstractMap.this.size();
 	  }
-	  
+
 	  public Iterator iterator()
-          {
+	  {
 	    return new Iterator()
-            {
+	    {
 	      Iterator map_iterator = AbstractMap.this.entrySet().iterator();
-	      
+
 	      public boolean hasNext()
-              {
+	      {
 		return map_iterator.hasNext();
 	      }
 
 	      public Object next()
-              {
-		return ((Map.Entry)map_iterator.next()).getValue();
+	      {
+		return ((Map.Entry) map_iterator.next()).getValue();
 	      }
-	      
+
 	      public void remove()
-              {
+	      {
 		map_iterator.remove();
 	      }
 	    };
 	  }
 	};
-    }
-    
+      }
+
     return this.valueCollection;
   }
 
-
   private Collection valueCollection = null;
   private Set keySet = null;
 }
-- 
cgit v1.1