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;
+        }
     }
 
 


Reply via email to