org.eclipse.emf.common.util
Class BasicEMap

java.lang.Object
  extended byorg.eclipse.emf.common.util.BasicEMap
All Implemented Interfaces:
Cloneable, Collection, EList, EMap, List, Serializable
Direct Known Subclasses:
EcoreEMap, URIMappingRegistryImpl

public class BasicEMap
extends Object
implements EMap, Cloneable, Serializable

A highly extensible map implementation.

See Also:
Serialized Form

Nested Class Summary
protected  class BasicEMap.BasicEMapIterator
          An iterator over the map entry data.
protected  class BasicEMap.BasicEMapKeyIterator
          An iterator over the map key data.
protected  class BasicEMap.BasicEMapValueIterator
          An iterator over the map value data.
protected  class BasicEMap.DelegatingMap
           
static interface BasicEMap.Entry
          An extended implementation interface for caching hash values and for upating an entry that may be manufactured as a uninitialized instance by a factory.
protected  class BasicEMap.EntryImpl
          A simple and obvious entry implementation.
protected static class BasicEMap.View
          An implementation class to hold the views.
 
Nested classes inherited from class org.eclipse.emf.common.util.EMap
EMap.InternalMapView
 
Field Summary
protected  EList delegateEList
          The underlying list of entries.
protected  BasicEList[] entryData
          The array of entry lists into which the hash codes are indexed.
protected  int modCount
          The modification indicator used to ensure iterator integrity.
protected  int size
          The size of the map.
protected  BasicEMap.View view
          The various alternative views of the map.
 
Constructor Summary
BasicEMap()
          Creates an empty instance.
BasicEMap(int initialCapacity)
          Creates an empty instance with the given capacity.
BasicEMap(Map map)
          Creates an instance that is a copy of the map.
 
Method Summary
 void add(int index, Object object)
          Delegates to delegateEList.
 boolean add(Object object)
          Delegates to delegateEList.
 boolean addAll(Collection collection)
          Delegates to delegateEList.
 boolean addAll(int index, Collection collection)
          Delegates to delegateEList.
 void clear()
          Delegates to delegateEList.
 Object clone()
          Returns a shallow copy of this map.
 boolean contains(Object object)
          Delegates to delegateEList.
 boolean containsAll(Collection collection)
          Delegates to delegateEList.
 boolean containsKey(Object key)
          Returns whether the key is associated with a value.
 boolean containsValue(Object value)
          Returns whether the value is associated with a key.
protected  void didAdd(BasicEMap.Entry entry)
          Called to indicate that the entry has been added.
protected  void didClear(BasicEList[] oldEntryData)
          Called to indicate that the map has been cleared.
protected  void didModify(BasicEMap.Entry entry, Object oldValue)
          Called to indicate that the entry has an updated value.
protected  void didRemove(BasicEMap.Entry entry)
          Called to indicate that the entry has been removed.
protected  void doClear()
          Clears the map.
protected  void doMove(BasicEMap.Entry entry)
          Increments the modification count.
protected  void doPut(BasicEMap.Entry entry)
          Adds the new entry to the map.
protected  void doRemove(BasicEMap.Entry entry)
          Removes the entry from the map.
protected  void ensureEntryDataExists()
          Ensures that the entry data is created and is populated with contents of the delegate list.
protected  BasicEMap.Entry entryForKey(int index, int hash, Object key)
          Called to return the entry given the index, the hash, and the key.
protected  int entryIndexForKey(int index, int hash, Object key)
          Called to return the entry list index given the index, the hash, and the key.
 Set entrySet()
          Returns a set view of the entries.
 boolean equals(Object object)
           
 Object get(int index)
          Delegates to delegateEList.
 Object get(Object key)
          Returns the value associated with the key.
protected  boolean grow(int minimumCapacity)
          Grows the capacity of the map to ensure that no additional growth is needed until the size exceeds the specified minimun capacity.
 int hashCode()
           
protected  int hashOf(Object key)
          Called to return the hash code of the key.
protected  int indexOf(int hash)
          Called to return the entry data index corresponding to the hash code.
 int indexOf(Object object)
          Delegates to delegateEList.
 int indexOfKey(Object key)
          Returns the index in the list of the entry with the given key, or -1, if there is no such entry.
protected  void initializeDelegateEList()
          Initializes the delegateEList.
 boolean isEmpty()
          Returns whether the map has zero size.
 Iterator iterator()
          Delegates to delegateEList.
 Set keySet()
          Returns a set view of the keys of the entries.
 int lastIndexOf(Object object)
          Delegates to delegateEList.
 ListIterator listIterator()
          Delegates to delegateEList.
 ListIterator listIterator(int index)
          Delegates to delegateEList.
 Map map()
          Returns a map view.
 Object move(int targetIndex, int sourceIndex)
          Delegates to delegateEList.
 void move(int index, Object object)
          Delegates to delegateEList.
protected  BasicEMap.Entry newEntry(int hash, Object key, Object value)
          Returns a new entry.
protected  BasicEList[] newEntryData(int capacity)
          Returns new allocated entry data storage.
protected  BasicEList newList()
          Returns a new allocated list of entries.
 Object put(Object key, Object value)
          Associates the key with the value and returns the value previously associated with the key, or null.
 void putAll(EMap map)
          Puts each Map.Entry of the given map into this one.
 void putAll(Map map)
          Puts each Map.Entry of the given map into this one.
protected  Object putEntry(BasicEMap.Entry entry, Object value)
          Sets the value of the entry, and returns the former value.
 Object remove(int index)
          Delegates to delegateEList.
 boolean remove(Object object)
          Delegates to delegateEList.
 boolean removeAll(Collection collection)
          Delegates to delegateEList.
protected  Object removeEntry(int index, int entryIndex)
          Removes the fully indexed entry from the map and returns it's value.
 Object removeKey(Object key)
          Disassociates the key from its value, and returns the value formerly associated with the key.
protected  Object resolve(Object key, Object value)
          Resolves the value associated with the key and returns the result.
 boolean retainAll(Collection collection)
          Delegates to delegateEList.
 Object set(int index, Object object)
          Delegates to delegateEList.
 int size()
          Returns the number of entries in the map.
 List subList(int start, int end)
          Delegates to delegateEList.
 Object[] toArray()
          Delegates to delegateEList.
 Object[] toArray(Object[] array)
          Delegates to delegateEList.
 String toString()
          Delegates to delegateEList.
protected  boolean useEqualsForKey()
          Returns whether equals rather than == should be used to compare keys.
protected  boolean useEqualsForValue()
          Returns whether equals rather than == should be used to compare values.
protected  void validateKey(Object key)
          Validates a new key.
protected  void validateValue(Object value)
          Validates a new key.
 Collection values()
          Returns a collection view the values of the entries.
 
Methods inherited from class java.lang.Object
finalize, getClass, notify, notifyAll, wait, wait, wait
 

Field Detail

delegateEList

protected transient EList delegateEList
The underlying list of entries.


size

protected int size
The size of the map.


entryData

protected transient BasicEList[] entryData
The array of entry lists into which the hash codes are indexed.


modCount

protected transient int modCount
The modification indicator used to ensure iterator integrity.


view

protected transient BasicEMap.View view
The various alternative views of the map.

Constructor Detail

BasicEMap

public BasicEMap()
Creates an empty instance.


BasicEMap

public BasicEMap(int initialCapacity)
Creates an empty instance with the given capacity.

Parameters:
initialCapacity - the initial capacity of the map before it must grow.
Throws:
IllegalArgumentException - if the initialCapacity is negative.

BasicEMap

public BasicEMap(Map map)
Creates an instance that is a copy of the map.

Parameters:
map - the initial contents of the map.
Method Detail

initializeDelegateEList

protected void initializeDelegateEList()
Initializes the delegateEList. This implementation illustrates the precise pattern that is used to delegate a list implementation's callback methods to the map implementation.


newEntryData

protected BasicEList[] newEntryData(int capacity)
Returns new allocated entry data storage. Clients may override this to create typed storage, but it's not likely. The cost of type checking via a typed array is negligable.

Parameters:
capacity - the capacity of storage needed.
Returns:
new entry data storage.

ensureEntryDataExists

protected void ensureEntryDataExists()
Ensures that the entry data is created and is populated with contents of the delegate list.


newList

protected BasicEList newList()
Returns a new allocated list of entries. Clients may override this to create typed storage. The cost of type checking via a typed array is negligable. The type must be kept in synch with newEntry.

Returns:
a new list of entries.
See Also:
newEntry(int, Object, Object)

newEntry

protected BasicEMap.Entry newEntry(int hash,
                                   Object key,
                                   Object value)
Returns a new entry. The key is validated and the value is validated. Clients may override this to create typed storage. The type must be kept in synch with newEntry.

Parameters:
hash - the cached hash code of the key.
key - the key.
value - the value.
Returns:
a new entry.
See Also:
newList()

putEntry

protected Object putEntry(BasicEMap.Entry entry,
                          Object value)
Sets the value of the entry, and returns the former value. The value is validated.

Parameters:
entry - the entry.
value - the value.
Returns:
the former value, or null.

useEqualsForKey

protected boolean useEqualsForKey()
Returns whether equals rather than == should be used to compare keys. The default is to return true but clients can optimize performance by returning false. The performance difference is highly significant.

Returns:
whether equals rather than == should be used to compare keys.

useEqualsForValue

protected boolean useEqualsForValue()
Returns whether equals rather than == should be used to compare values. The default is to return true but clients can optimize performance by returning false. The performance difference is highly significant.

Returns:
whether equals rather than == should be used to compare values.

resolve

protected Object resolve(Object key,
                         Object value)
Resolves the value associated with the key and returns the result. This implementation simply returns the value; clients can use this to transform objects as they are fetched.

Parameters:
key - the key of an entry.
value - the value of an entry.
Returns:
the resolved value.

validateKey

protected void validateKey(Object key)
Validates a new key. This implementation does nothing, but clients may throw runtime exceptions in order to handle constraint violations.

Parameters:
key - the new key.
Throws:
IllegalArgumentException - if a constraint prevents the object from being added.

validateValue

protected void validateValue(Object value)
Validates a new key. This implementation does nothing, but clients may throw runtime exceptions in order to handle constraint violations.

Parameters:
value - the new value.
Throws:
IllegalArgumentException - if a constraint prevents the object from being added.

didAdd

protected void didAdd(BasicEMap.Entry entry)
Called to indicate that the entry has been added. This implementation does nothing; clients can use this to monitor additions to the map.

Parameters:
entry - the added entry.

didModify

protected void didModify(BasicEMap.Entry entry,
                         Object oldValue)
Called to indicate that the entry has an updated value. This implementation does nothing; clients can use this to monitor value changes in the map.

Parameters:
entry - the new entry.

didRemove

protected void didRemove(BasicEMap.Entry entry)
Called to indicate that the entry has been removed. This implementation does nothing; clients can use this to monitor removals from the map.

Parameters:
entry - the removed entry.

didClear

protected void didClear(BasicEList[] oldEntryData)
Called to indicate that the map has been cleared. This implementation does calls didRemove for each entry; clients can use this to monitor clearing of the map.

Parameters:
oldEntryData - the removed entries.

size

public int size()
Returns the number of entries in the map.

Specified by:
size in interface List
Returns:
the number of entries in the map.

isEmpty

public boolean isEmpty()
Returns whether the map has zero size.

Specified by:
isEmpty in interface List
Returns:
whether the map has zero size.

indexOfKey

public int indexOfKey(Object key)
Description copied from interface: EMap
Returns the index in the list of the entry with the given key, or -1, if there is no such entry.

Specified by:
indexOfKey in interface EMap
Parameters:
key - a key.
Returns:
the index of the entry with the given key.

containsKey

public boolean containsKey(Object key)
Description copied from interface: EMap
Returns whether the key is associated with a value.

Specified by:
containsKey in interface EMap
Parameters:
key - a key associated with a value.
Returns:
whether the key is associated with a value.

containsValue

public boolean containsValue(Object value)
Description copied from interface: EMap
Returns whether the value is associated with a key.

Specified by:
containsValue in interface EMap
Parameters:
value - a value associated with a key.
Returns:
whether the value is associated with a key.

get

public Object get(Object key)
Description copied from interface: EMap
Returns the value associated with the key. The key, the value, or both may be null.

Specified by:
get in interface EMap
Parameters:
key - the key of the value.
Returns:
the value associated with the key.

put

public Object put(Object key,
                  Object value)
Description copied from interface: EMap
Associates the key with the value and returns the value previously associated with the key, or null. The key, the value, or both may be null. Either the existing entry is updated, or a new entry is added to the end of the list.

Specified by:
put in interface EMap
Parameters:
key - the key of the value.
value - the value associated with the key.
Returns:
the value formerly associated with the key, or null.

doPut

protected void doPut(BasicEMap.Entry entry)
Adds the new entry to the map.

Parameters:
entry - the new entry.

removeKey

public Object removeKey(Object key)
Description copied from interface: EMap
Disassociates the key from its value, and returns the value formerly associated with the key. An entry is removed from the list, if the key is found.

Specified by:
removeKey in interface EMap
Parameters:
key - the key of a value.
Returns:
the value formerly associated with the key.

doRemove

protected void doRemove(BasicEMap.Entry entry)
Removes the entry from the map.

Parameters:
entry - an entry in the map.

removeEntry

protected Object removeEntry(int index,
                             int entryIndex)
Removes the fully indexed entry from the map and returns it's value.

Parameters:
index - the index in the entry data
entryIndex - the index in the list of entries.
Returns:
the value of the entry.

putAll

public void putAll(Map map)
Description copied from interface: EMap
Puts each Map.Entry of the given map into this one.

Specified by:
putAll in interface EMap
Parameters:
map - the map of entries.
See Also:
EMap.put(java.lang.Object, java.lang.Object)

putAll

public void putAll(EMap map)
Description copied from interface: EMap
Puts each Map.Entry of the given map into this one.

Specified by:
putAll in interface EMap
Parameters:
map - the map of entries.
See Also:
EMap.put(java.lang.Object, java.lang.Object)

doClear

protected void doClear()
Clears the map.


doMove

protected void doMove(BasicEMap.Entry entry)
Increments the modification count.


clone

public Object clone()
Returns a shallow copy of this map.

Returns:
a shallow copy of this map.

map

public Map map()
Description copied from interface: EMap
Returns a map view.

Specified by:
map in interface EMap
Returns:
a map view.

keySet

public Set keySet()
Description copied from interface: EMap
Returns a set view of the keys of the entries.

Specified by:
keySet in interface EMap
Returns:
a set view of the keys of the entries.

values

public Collection values()
Description copied from interface: EMap
Returns a collection view the values of the entries.

Specified by:
values in interface EMap
Returns:
a collection view the values of the entries.

entrySet

public Set entrySet()
Description copied from interface: EMap
Returns a set view of the entries.

Specified by:
entrySet in interface EMap
Returns:
a set view of the entries.

hashOf

protected int hashOf(Object key)
Called to return the hash code of the key.

Parameters:
key - the key.
Returns:
the hash code of the object.

indexOf

protected int indexOf(int hash)
Called to return the entry data index corresponding to the hash code.

Parameters:
hash - the hash code.
Returns:
the index corresponding to the hash code.

entryForKey

protected BasicEMap.Entry entryForKey(int index,
                                      int hash,
                                      Object key)
Called to return the entry given the index, the hash, and the key.

Parameters:
index - the entry data index of the key.
hash - the hash code of the key.
key - the key.
Returns:
the entry.

entryIndexForKey

protected int entryIndexForKey(int index,
                               int hash,
                               Object key)
Called to return the entry list index given the index, the hash, and the key.

Parameters:
index - the entry data index of the key.
hash - the hash code of the key.
key - the key.
Returns:
the entry list index.

grow

protected boolean grow(int minimumCapacity)
Grows the capacity of the map to ensure that no additional growth is needed until the size exceeds the specified minimun capacity.


contains

public boolean contains(Object object)
Delegates to delegateEList.

Specified by:
contains in interface List

containsAll

public boolean containsAll(Collection collection)
Delegates to delegateEList.

Specified by:
containsAll in interface List

indexOf

public int indexOf(Object object)
Delegates to delegateEList.

Specified by:
indexOf in interface List

lastIndexOf

public int lastIndexOf(Object object)
Delegates to delegateEList.

Specified by:
lastIndexOf in interface List

toArray

public Object[] toArray()
Delegates to delegateEList.

Specified by:
toArray in interface List

toArray

public Object[] toArray(Object[] array)
Delegates to delegateEList.

Specified by:
toArray in interface List

get

public Object get(int index)
Delegates to delegateEList.

Specified by:
get in interface List

set

public Object set(int index,
                  Object object)
Delegates to delegateEList.

Specified by:
set in interface List

add

public boolean add(Object object)
Delegates to delegateEList.

Specified by:
add in interface List

add

public void add(int index,
                Object object)
Delegates to delegateEList.

Specified by:
add in interface List

addAll

public boolean addAll(Collection collection)
Delegates to delegateEList.

Specified by:
addAll in interface List

addAll

public boolean addAll(int index,
                      Collection collection)
Delegates to delegateEList.

Specified by:
addAll in interface List

remove

public boolean remove(Object object)
Delegates to delegateEList.

Specified by:
remove in interface List

removeAll

public boolean removeAll(Collection collection)
Delegates to delegateEList.

Specified by:
removeAll in interface List

remove

public Object remove(int index)
Delegates to delegateEList.

Specified by:
remove in interface List

retainAll

public boolean retainAll(Collection collection)
Delegates to delegateEList.

Specified by:
retainAll in interface List

clear

public void clear()
Delegates to delegateEList.

Specified by:
clear in interface List

move

public void move(int index,
                 Object object)
Delegates to delegateEList.

Specified by:
move in interface EList
Parameters:
index - the position of the object after the move.
object - the object to move.

move

public Object move(int targetIndex,
                   int sourceIndex)
Delegates to delegateEList.

Specified by:
move in interface EList
Parameters:
targetIndex - the position of the object after the move.
sourceIndex - the position of the object before the move.
Returns:
the moved object.

iterator

public Iterator iterator()
Delegates to delegateEList.

Specified by:
iterator in interface List

listIterator

public ListIterator listIterator()
Delegates to delegateEList.

Specified by:
listIterator in interface List

listIterator

public ListIterator listIterator(int index)
Delegates to delegateEList.

Specified by:
listIterator in interface List

subList

public List subList(int start,
                    int end)
Delegates to delegateEList.

Specified by:
subList in interface List

hashCode

public int hashCode()
Specified by:
hashCode in interface List

equals

public boolean equals(Object object)
Specified by:
equals in interface List

toString

public String toString()
Delegates to delegateEList.


Copyright 2001-2006 IBM Corporation and others.
All Rights Reserved.