/*
* 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.lists;
import java.util.List;
import org.cloudbus.cloudsim.ResCloudlet;
/**
* ResCloudletList is a collection of operations on lists of ResCloudlets.
*
* @author Anton Beloglazov
* @since CloudSim Toolkit 2.0
*/
public class ResCloudletList {
/**
* Returns a given Cloudlet. This method needs a combination of Cloudlet Id and User Id because
* each Cloud Users might have exactly same Cloudlet Ids.
*
* @param cloudletId a Cloudlet Id
* @param userId an User Id
* @param list the list
* @return the Cloudlet.
* @throws IndexOutOfBoundsException - if a Cloudlet with specified Id and user id is not in the
* list.
* @pre cloudletId >= 0
* @pre userId >= 0
* @post $none
*/
public static <T extends ResCloudlet> ResCloudlet getByIdAndUserId(
List<T> list,
int cloudletId,
int userId) {
for (T rcl : list) {
if (rcl.getCloudletId() == cloudletId && rcl.getUserId() == userId) {
return rcl;
}
}
return null;
}
/**
* Finds the index of a Cloudlet inside the list. This method needs a combination of Cloudlet Id
* and User Id because each Cloud User might have exactly the same Cloudlet Id.
*
* @param cloudletId a Cloudlet Id
* @param userId an User Id
* @param list the list
* @return the index in this list of the first occurrence of the specified Cloudlet, or
* <code>-1</code> if the list does not contain this Cloudlet.
* @pre cloudletId >= 0
* @pre userId >= 0
* @post $none
*/
public static <T extends ResCloudlet> int indexOf(List<T> list, int cloudletId, int userId) {
int i = 0;
for (T rcl : list) {
if (rcl.getCloudletId() == cloudletId && rcl.getUserId() == userId) {
return i;
}
i++;
}
return -1;
}
/**
* Move a ResCloudlet object from this linked-list into a specified one.
*
* @param listFrom the list from
* @param listTo the list to
* @param cloudlet the cloudlet
* @return <b>true</b> if the moving operation successful, otherwise return <b>false</b>
* @pre obj != null
* @pre list != null
* @post $result == true || $result == false
*/
public static <T extends ResCloudlet> boolean move(List<T> listFrom, List<T> listTo, T cloudlet) {
if (listFrom.remove(cloudlet)) {
listTo.add(cloudlet);
return true;
}
return false;
}
/**
* Returns the position of the cloudlet with that id, if it exists. Otherwise -1.
* @param cloudletList - the list of cloudlets.
* @param id - the id we search for.
* @return - the position of the cloudlet with that id, or -1 otherwise.
*/
public static <T extends ResCloudlet> int getPositionById(List<T> cloudletList, int id) {
int i = 0 ;
for (T cloudlet : cloudletList) {
if (cloudlet.getCloudletId() == id) {
return i;
}
i++;
}
return -1;
}
}