/* * Title: CloudSim Toolkit * Description: CloudSim (Cloud Simulation) Toolkit for Modeling and Simulation of Clouds * Licence: GPL - http://www.gnu.org/copyleft/gpl.html * * Copyright (c) 2009-2012, The University of Melbourne, Australia */ package org.cloudbus.cloudsim.core.predicates; import org.cloudbus.cloudsim.core.SimEvent; /** * A predicate which selects events coming from specific entities.<br/> * The idea of simulation predicates was copied from SimJava 2. * * @author Marcos Dias de Assuncao * @since CloudSim Toolkit 1.0 * @see PredicateNotFrom * @see Predicate */ public class PredicateFrom extends Predicate { /** The IDs of source entities to check the reception of events from. */ private final int[] ids; /** * Constructor used to select events that were sent by a specific entity. * * @param sourceId the id number of the source entity */ public PredicateFrom(int sourceId) { ids = new int[] { sourceId }; } /** * Constructor used to select events that were sent by any entity from a given set. * * @param sourceIds the set of id numbers of the source entities */ public PredicateFrom(int[] sourceIds) { ids = sourceIds.clone(); } /** * Matches any event received from the registered sources. * * @param ev {@inheritDoc} * @return {@inheritDoc} * @see #ids */ @Override public boolean match(SimEvent ev) { int src = ev.getSource(); /* @todo Instead of using an array where each position stores the id of an entity (that requires a loop over the array, it would be used a HashSet (Set interface) to reduce the time to match the event. This should be applied to the other implementations of the super class. */ for (int id : ids) { if (src == id) { return true; } } return false; } }