Author: mwebb
Date: Wed Aug 15 21:33:04 2007
New Revision: 566482
URL: http://svn.apache.org/viewvc?view=rev&rev=566482
Log:
updated the class and now is ready for testing...
Modified:
mina/sandbox/mwebb/mina/src/main/java/org/apache/mina/util/CopyOnWriteMap.java
Modified:
mina/sandbox/mwebb/mina/src/main/java/org/apache/mina/util/CopyOnWriteMap.java
URL:
http://svn.apache.org/viewvc/mina/sandbox/mwebb/mina/src/main/java/org/apache/mina/util/CopyOnWriteMap.java?view=diff&rev=566482&r1=566481&r2=566482
==============================================================================
---
mina/sandbox/mwebb/mina/src/main/java/org/apache/mina/util/CopyOnWriteMap.java
(original)
+++
mina/sandbox/mwebb/mina/src/main/java/org/apache/mina/util/CopyOnWriteMap.java
Wed Aug 15 21:33:04 2007
@@ -24,7 +24,6 @@
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
-import java.util.concurrent.locks.ReentrantLock;
/**
@@ -39,13 +38,10 @@
* @author <a href="mailto:[EMAIL PROTECTED]">Apache Directory Project</a>
* @version $Rev$, $Date$
*/
-public class CopyOnWriteMap<K, V> implements Map<K, V>
+public class CopyOnWriteMap<K, V> implements Map<K, V>, Cloneable
{
private HashMap<K, V> internalMap;
- transient final ReentrantLock lock = new ReentrantLock();
-
-
/**
* Creates a new instance of CopyOnWriteMap.
*
@@ -75,13 +71,15 @@
*
* @see java.util.Map#put(java.lang.Object, java.lang.Object)
*/
+ @SuppressWarnings("unchecked")
public V put( K key, V value )
{
- HashMap<K,V> newMap = new HashMap<K,V>( internalMap );
- V val = newMap.put( key, value );
- internalMap = newMap;
-
- return val;
+ synchronized( this ){
+ HashMap<K,V> newMap = (HashMap<K, V>)internalMap.clone();
+ V val = newMap.put( key, value );
+ internalMap = newMap;
+ return val;
+ }
}
@@ -91,13 +89,15 @@
*
* @see java.util.Map#remove(java.lang.Object)
*/
+ @SuppressWarnings("unchecked")
public V remove( Object key )
{
- HashMap<K,V> newMap = new HashMap<K,V>( internalMap );
- V val = newMap.remove( key );
- internalMap = newMap;
-
- return val;
+ synchronized( this ){
+ HashMap<K,V> newMap = (HashMap<K,V>)internalMap.clone();
+ V val = newMap.remove( key );
+ internalMap = newMap;
+ return val;
+ }
}
@@ -107,11 +107,14 @@
*
* @see java.util.Map#putAll(java.util.Map)
*/
+ @SuppressWarnings("unchecked")
public void putAll( Map<? extends K, ? extends V> newData )
{
- HashMap<K,V> newMap = new HashMap<K,V>( internalMap );
- newMap.putAll( newData );
- internalMap = newMap;
+ synchronized( this ){
+ HashMap<K,V> newMap = (HashMap<K,V>)internalMap.clone();
+ newMap.putAll( newData );
+ internalMap = newMap;
+ }
}
@@ -120,11 +123,14 @@
*
* @see java.util.Map#clear()
*/
+ @SuppressWarnings("unchecked")
public void clear()
{
- HashMap<K,V> newMap = new HashMap<K,V>( internalMap );
- newMap.clear();
- internalMap = newMap;
+ synchronized( this ){
+ HashMap<K,V> newMap = (HashMap<K,V>)internalMap.clone();
+ newMap.clear();
+ internalMap = newMap;
+ }
}