You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mina.apache.org by tr...@apache.org on 2007/08/17 14:13:43 UTC

svn commit: r567034 - in /mina/trunk/core/src/main/java/org/apache/mina/util: ConcurrentHashSet.java MapBackedSet.java

Author: trustin
Date: Fri Aug 17 05:13:42 2007
New Revision: 567034

URL: http://svn.apache.org/viewvc?view=rev&rev=567034
Log:
* Fixed wrong add() implementation of MapBackedSet
* Overrided MapBackedSet.add() in ConcurrentHashSet for perfect atomicity

Modified:
    mina/trunk/core/src/main/java/org/apache/mina/util/ConcurrentHashSet.java
    mina/trunk/core/src/main/java/org/apache/mina/util/MapBackedSet.java

Modified: mina/trunk/core/src/main/java/org/apache/mina/util/ConcurrentHashSet.java
URL: http://svn.apache.org/viewvc/mina/trunk/core/src/main/java/org/apache/mina/util/ConcurrentHashSet.java?view=diff&rev=567034&r1=567033&r2=567034
==============================================================================
--- mina/trunk/core/src/main/java/org/apache/mina/util/ConcurrentHashSet.java (original)
+++ mina/trunk/core/src/main/java/org/apache/mina/util/ConcurrentHashSet.java Fri Aug 17 05:13:42 2007
@@ -22,6 +22,7 @@
 import java.util.Collection;
 import java.util.Set;
 import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.ConcurrentMap;
 
 /**
  * A {@link ConcurrentHashMap}-backed {@link Set}.
@@ -36,5 +37,10 @@
 
     public ConcurrentHashSet(Collection<E> c) {
         super(new ConcurrentHashMap<E, Boolean>(), c);
+    }
+
+    @Override
+    public boolean add(E o) {
+        return ((ConcurrentMap<E, Boolean>) map).putIfAbsent(o, Boolean.TRUE);
     }
 }

Modified: mina/trunk/core/src/main/java/org/apache/mina/util/MapBackedSet.java
URL: http://svn.apache.org/viewvc/mina/trunk/core/src/main/java/org/apache/mina/util/MapBackedSet.java?view=diff&rev=567034&r1=567033&r2=567034
==============================================================================
--- mina/trunk/core/src/main/java/org/apache/mina/util/MapBackedSet.java (original)
+++ mina/trunk/core/src/main/java/org/apache/mina/util/MapBackedSet.java Fri Aug 17 05:13:42 2007
@@ -32,44 +32,49 @@
  * @version $Rev$, $Date$
  */
 public class MapBackedSet<E> extends AbstractSet<E> {
-    private final Map<E, Boolean> delegate;
+    protected final Map<E, Boolean> map;
 
     public MapBackedSet(Map<E, Boolean> map) {
-        this.delegate = map;
+        this.map = map;
     }
 
     public MapBackedSet(Map<E, Boolean> map, Collection<E> c) {
-        this. delegate = map;
+        this. map = map;
         addAll(c);
     }
 
     @Override
     public int size() {
-        return delegate.size();
+        return map.size();
     }
 
     @Override
     public boolean contains(Object o) {
-        return delegate.containsKey(o);
+        return map.containsKey(o);
     }
 
     @Override
     public Iterator<E> iterator() {
-        return delegate.keySet().iterator();
+        return map.keySet().iterator();
     }
 
     @Override
-    public boolean add(E arg0) {
-        return delegate.put(arg0, Boolean.TRUE) == null;
+    public boolean add(E o) {
+        if (map.containsKey(o)) {
+            return false;
+        }
+        
+        map.put(o, Boolean.TRUE);
+        return true;
     }
 
     @Override
-    public boolean remove(Object arg0) {
-        return delegate.remove(arg0) != null;
+    public boolean remove(Object o) {
+        return map.remove(o) != null;
     }
 
     @Override
     public void clear() {
-        delegate.clear();
+        map.clear();
     }
 }