RLPark 1.0.0
Reinforcement Learning Framework in Java
|
00001 package zephyr.plugin.core.api.signals; 00002 00003 import java.io.Serializable; 00004 import java.util.ArrayList; 00005 import java.util.LinkedList; 00006 import java.util.List; 00007 00008 00009 public class Signal<T> implements Serializable { 00010 private static final long serialVersionUID = -8879732560976561426L; 00011 00012 static public interface EventInfoGenerator<T> { 00013 T generate(); 00014 } 00015 00016 private final List<Listener<T>> listeners = new LinkedList<Listener<T>>(); 00017 00018 public Signal() { 00019 super(); 00020 } 00021 00022 synchronized public Listener<T> connect(Listener<T> listener) { 00023 assert listener != null; 00024 assert this.listeners.indexOf(listener) == -1; 00025 this.listeners.add(listener); 00026 return listener; 00027 } 00028 00029 synchronized public void disconnect(Listener<T> listener) { 00030 boolean elementFound; 00031 elementFound = listeners.remove(listener); 00032 assert elementFound; 00033 } 00034 00035 public final void fire(T eventInfo) { 00036 if (listeners.isEmpty()) 00037 return; 00038 for (Listener<T> listener : getListeners()) 00039 listener.listen(eventInfo); 00040 } 00041 00042 public synchronized ArrayList<Listener<T>> getListeners() { 00043 return new ArrayList<Listener<T>>(listeners); 00044 } 00045 00046 public final void fireIFN(EventInfoGenerator<T> eventInfoGenerator) { 00047 if (listeners.isEmpty()) 00048 return; 00049 fire(eventInfoGenerator.generate()); 00050 } 00051 00052 public int nbListeners() { 00053 return listeners.size(); 00054 } 00055 }