/* * Copyright (c) MuleSoft, Inc. All rights reserved. http://www.mulesoft.com * The software in this package is published under the terms of the CPAL v1.0 * license, a copy of which has been included with this distribution in the * LICENSE.txt file. */ package org.mule.runtime.core.util.concurrent; /* * Written by Doug Lea with assistance from members of JCP JSR-166 Expert Group and * released to the public domain, as explained at * http://creativecommons.org/licenses/publicdomain */ import java.io.IOException; import java.io.Serializable; import java.util.AbstractSet; import java.util.Collection; import java.util.Iterator; import java.util.Set; import java.util.concurrent.ConcurrentHashMap; public class ConcurrentHashSet/* <E> */extends AbstractSet/* <E> */ implements Set/* <E> */, Serializable { private static final long serialVersionUID = 2454657854757543876L; private final ConcurrentHashMap/* <E, Boolean> */ map; private transient Set/* <E> */ keySet; public ConcurrentHashSet() { map = new ConcurrentHashMap/* <E, Boolean> */(); keySet = map.keySet(); } public ConcurrentHashSet(int initialCapacity) { map = new ConcurrentHashMap/* <E, Boolean> */(initialCapacity); keySet = map.keySet(); } public ConcurrentHashSet(int initialCapacity, float loadFactor, int concurrencyLevel) { map = new ConcurrentHashMap/* <E, Boolean> */(initialCapacity, loadFactor, concurrencyLevel); keySet = map.keySet(); } public int size() { return map.size(); } public boolean isEmpty() { return map.isEmpty(); } public boolean contains(Object o) { return map.containsKey(o); } public Iterator/* <E> */ iterator() { return keySet.iterator(); } public Object[] toArray() { return keySet.toArray(); } public/* <T> T[] */Object[] toArray(Object[]/* T[] */ a) { return keySet.toArray(a); } public boolean add(Object/* E */ e) { return map.put(e, Boolean.TRUE) == null; } public boolean remove(Object o) { return map.remove(o) != null; } public boolean removeAll(Collection/* <?> */ c) { return keySet.removeAll(c); } public boolean retainAll(Collection/* <?> */ c) { return keySet.retainAll(c); } public void clear() { map.clear(); } public boolean equals(Object o) { return keySet.equals(o); } public int hashCode() { return keySet.hashCode(); } private void readObject(java.io.ObjectInputStream s) throws IOException, ClassNotFoundException { s.defaultReadObject(); keySet = map.keySet(); } }