parent
15041d8ed2
commit
a4c485a7de
@ -1,153 +0,0 @@ |
||||
package mightypork.gamecore.eventbus; |
||||
|
||||
|
||||
import java.util.Collection; |
||||
import java.util.HashSet; |
||||
import java.util.LinkedList; |
||||
import java.util.List; |
||||
|
||||
|
||||
/** |
||||
* HashSet that buffers "add" and "remove" calls and performs them all at once |
||||
* when a flush() method is called. |
||||
* |
||||
* @author MightyPork |
||||
* @param <E> element type |
||||
*/ |
||||
public class BufferedHashSet<E> extends HashSet<E> { |
||||
|
||||
private final List<E> toAdd = new LinkedList<>(); |
||||
private final List<Object> toRemove = new LinkedList<>(); |
||||
private boolean buffering = false; |
||||
|
||||
|
||||
/** |
||||
* make empty |
||||
*/ |
||||
public BufferedHashSet() |
||||
{ |
||||
super(); |
||||
} |
||||
|
||||
|
||||
/** |
||||
* make from elements of a collection |
||||
* |
||||
* @param c |
||||
*/ |
||||
public BufferedHashSet(Collection<? extends E> c) |
||||
{ |
||||
super(c); |
||||
} |
||||
|
||||
|
||||
/** |
||||
* make new |
||||
* |
||||
* @param initialCapacity |
||||
* @param loadFactor |
||||
*/ |
||||
public BufferedHashSet(int initialCapacity, float loadFactor) |
||||
{ |
||||
super(initialCapacity, loadFactor); |
||||
} |
||||
|
||||
|
||||
/** |
||||
* make new |
||||
* |
||||
* @param initialCapacity |
||||
*/ |
||||
public BufferedHashSet(int initialCapacity) |
||||
{ |
||||
super(initialCapacity); |
||||
} |
||||
|
||||
|
||||
@Override |
||||
public boolean add(E e) |
||||
{ |
||||
if (buffering) { |
||||
toAdd.add(e); |
||||
} else { |
||||
super.add(e); |
||||
} |
||||
|
||||
return true; |
||||
} |
||||
|
||||
|
||||
@Override |
||||
public boolean remove(Object e) |
||||
{ |
||||
if (buffering) { |
||||
toRemove.add(e); |
||||
} else { |
||||
super.remove(e); |
||||
} |
||||
|
||||
return true; |
||||
} |
||||
|
||||
|
||||
/** |
||||
* Flush all |
||||
*/ |
||||
public void flush() |
||||
{ |
||||
for (final E e : toAdd) { |
||||
super.add(e); |
||||
} |
||||
|
||||
for (final Object e : toRemove) { |
||||
super.remove(e); |
||||
} |
||||
|
||||
toAdd.clear(); |
||||
toRemove.clear(); |
||||
} |
||||
|
||||
|
||||
@Override |
||||
public boolean removeAll(Collection<?> c) |
||||
{ |
||||
throw new UnsupportedOperationException(); |
||||
} |
||||
|
||||
|
||||
@Override |
||||
public boolean containsAll(Collection<?> c) |
||||
{ |
||||
throw new UnsupportedOperationException(); |
||||
} |
||||
|
||||
|
||||
@Override |
||||
public boolean addAll(Collection<? extends E> c) |
||||
{ |
||||
throw new UnsupportedOperationException(); |
||||
} |
||||
|
||||
|
||||
@Override |
||||
public boolean retainAll(Collection<?> c) |
||||
{ |
||||
throw new UnsupportedOperationException(); |
||||
} |
||||
|
||||
|
||||
/** |
||||
* Toggle buffering |
||||
* |
||||
* @param enable enable buffering |
||||
*/ |
||||
public void setBuffering(boolean enable) |
||||
{ |
||||
if (this.buffering && !enable) { |
||||
flush(); |
||||
} |
||||
|
||||
this.buffering = enable; |
||||
} |
||||
|
||||
} |
Loading…
Reference in new issue