RLPark 1.0.0
Reinforcement Learning Framework in Java

Signal.java

Go to the documentation of this file.
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 }
 All Classes Namespaces Files Functions Variables Enumerations
Zephyr
RLPark