aboutsummaryrefslogtreecommitdiff
path: root/libjava/java/util/AbstractMap.java
diff options
context:
space:
mode:
Diffstat (limited to 'libjava/java/util/AbstractMap.java')
-rw-r--r--libjava/java/util/AbstractMap.java283
1 files changed, 283 insertions, 0 deletions
diff --git a/libjava/java/util/AbstractMap.java b/libjava/java/util/AbstractMap.java
new file mode 100644
index 0000000..4935afe
--- /dev/null
+++ b/libjava/java/util/AbstractMap.java
@@ -0,0 +1,283 @@
+/* AbstractMap.java -- Abstract implementation of most of Map
+ Copyright (C) 1998, 1999, 2000 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+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
+General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with GNU Classpath; see the file COPYING. If not, write to the
+Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+02111-1307 USA.
+
+As a special exception, if you link this library with other files to
+produce an executable, this library does not by itself cause the
+resulting executable to be covered by the GNU General Public License.
+This exception does not however invalidate any other reasons why the
+executable file might be covered by the GNU General Public License. */
+
+
+// TO DO:
+// comments
+// test suite
+
+package java.util;
+
+public abstract class AbstractMap implements Map {
+
+ public void clear()
+ {
+ entrySet().clear();
+ }
+
+ 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;
+ }
+
+ return false;
+ }
+
+ 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;
+ }
+
+ public abstract Set entrySet();
+
+ public boolean equals( Object o )
+ {
+ if( this == o )
+ return true;
+
+ if( o == null || !( o instanceof Map ) )
+ return false;
+
+ Map m = (Map)o;
+ 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;
+ }
+
+ 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();
+ }
+
+ return null;
+ }
+
+ public int hashCode()
+ {
+ int hashcode = 0;
+ Iterator entries = entrySet().iterator();
+
+ while( entries.hasNext() )
+ hashcode += entries.next().hashCode();
+
+ return hashcode;
+ }
+
+ public boolean isEmpty()
+ {
+ return size() == 0;
+ }
+
+ public Set keySet()
+ {
+ if( this.keySet == null )
+ {
+ this.keySet =
+ new AbstractSet()
+ {
+ public int size()
+ {
+ return AbstractMap.this.size();
+ }
+
+ public boolean contains(Object key)
+ {
+ 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();
+ }
+
+ public void remove()
+ {
+ map_iterator.remove();
+ }
+ };
+ }
+ };
+ }
+
+ return this.keySet;
+ }
+
+ public Object put( Object key, Object value )
+ {
+ throw new UnsupportedOperationException();
+ }
+
+ 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() );
+ }
+ }
+
+ 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 ) )
+ {
+ value = entry.getValue();
+ entries.remove();
+ return value;
+ }
+ }
+
+ return null;
+ }
+
+ public int size()
+ {
+ return entrySet().size();
+ }
+
+ 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();
+ }
+
+ public Collection values()
+ {
+ 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();
+ }
+
+ public void remove()
+ {
+ map_iterator.remove();
+ }
+ };
+ }
+ };
+ }
+
+ return this.valueCollection;
+ }
+
+
+ private Collection valueCollection = null;
+ private Set keySet = null;
+}