/* Sim_event.java */ package eduni.simjava; /** * This class represents events which are passed between the entities * in the simulation. * @see Sim_system * @version 1.0, 4 September 1996 * @author Ross McNab */ public class Sim_event implements Cloneable { // Private data members private int etype; // internal event type private double time; // sim time event should occur private int ent_src; // id of entity who scheduled event private int ent_dst; // id of entity event will be sent to private int tag; // the user defined type of the event private Object data; // any data the event is carrying // // Public library interface // // Internal event types static final int ENULL = 0; static final int SEND = 1; static final int HOLD_DONE = 2; static final int CREATE = 3; // Constructors /** Contructor, create a blank event. Usefull for fetching events * using methods such as Sim_entity.sim_wait(ev). * @return A blank instance of the class Sim_event */ public Sim_event() { etype = ENULL; this.time = -1.0; ent_src = -1; ent_dst = -1; this.tag = -1; data = null; } // Package level constructors Sim_event(int evtype, double time, int src, int dest, int tag, Object edata) { etype = evtype; this.time = time; ent_src = src; ent_dst = dest; this.tag = tag; data = edata; } Sim_event(int evtype, double time, int src) { etype = evtype; this.time = time; ent_src = src; ent_dst = -1; this.tag = -1; data = null; } // Public access methods /** Get the unique id number of the entity which recieved this event. * @return the id number */ public int get_dest() { return ent_dst; } /** Get the unique id number of the entity which scheduled this event. * @return the id number */ public int get_src() { return ent_src; } /** Get the simulation time that this event was scheduled. * @return The simulation time */ public double event_time() { return time; } /** Get the user-defined tag in this event * @return The tag */ public int type() { return tag; } // The user defined type /** Get the unique id number of the entity which scheduled this event. * @return the id number */ public int scheduled_by() { return ent_src; } /** Get the user-defined tag in this event. * @return The tag */ public int get_tag() { return tag; } /** Get the data passed in this event. * @return A reference to the data */ public Object get_data() { return data; } /** Determine if the event was sent from a given port. * @param p The port to test * @return true if the event was scheduled through the port */ public boolean from_port(Sim_port p) { return (get_src()==p.get_dest()); } // Public modifying methods /** Create an exact copy of this event. * @return A reference to the copy */ public Object clone() { return new Sim_event(etype, time, ent_src, ent_dst, tag, data); } /** Set the source entity of this event. * @param s The unique id number of the entity */ public void set_src(int s) { ent_src = s; } /** Set the destination entity of this event. * @param d The unique id number of the entity */ public void set_dest(int d) { ent_dst = d; } // // Package level methods // int get_type() { return etype; } // The internal type void copy(Sim_event ev) { ent_dst = ev.get_dest(); ent_src = ev.get_src(); time = ev.event_time(); etype = ev.get_type(); tag = ev.get_tag(); data = ev.get_data(); } }