import java.util.Comparator; /** * Clase generica para hacer simulaciones * @author Amparo López Gaona * @version 1a. ed. */ public class Simulacion { private double horaActual; // Hora actual en la simulacion private Heap eventos; // Cola de eventos pendientes /** * Constructor que recibe un comparador * @param cmp -- comparador para ordenar los eventos de la simulacion */ public Simulacion(Comparator cmp) { eventos = new Heap(cmp); horaActual = 0; } /** * Constructor por omisión */ public Simulacion() { eventos = new Heap (new MiComparador()); horaActual = 0; } /** * Método para registrar un evento en la simulacion * @param nuevoEvento -- evento que sera registrado */ public void registrarEvento (Evento nuevoEvento) { eventos.agregar(nuevoEvento); } /** * Metodo para ejecutar la simulacion de los eventos de la cola */ public void ejecutar() { while (! eventos.estaVacia()) { Evento siguienteEvento = (Evento) eventos.obtenerPrimero(); eventos.eliminar(); horaActual = siguienteEvento.hora; siguienteEvento.procesarEvento(); } } /** * Método para obtener la hora actual del evento * @return int -- hora actual */ public double hora () { return horaActual; } /* * Comparador privado para ser usado en caso de que no se proporcione ninguno */ private class MiComparador implements Comparator { public int compare(Object o1, Object o2) { Comparable oo1 = (Comparable) o2; return oo1.compareTo (o2); } public boolean equals (Object obj) { return compare(this, obj) == 0; } } }