org.cloudbus.cloudsim.resources.Resource Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of cloudsim-plus Show documentation
Show all versions of cloudsim-plus Show documentation
CloudSim Plus: A modern, highly extensible and easier-to-use Java 8 Framework for Modeling and Simulation of Cloud Computing Infrastructures and Services
/*
* 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.resources;
/**
* An interface to represent a physical or virtual resource (like RAM, CPU
* or Bandwidth) that doesn't provide direct features to change allocated
* amount of resource. Objects that directly implement this interface
* are supposed to define the capacity and amount of allocated resource
* in their constructors.
*
* @author Uros Cibej
* @author Anthony Sulistio
* @author Manoel Campos da Silva Filho
* @since CloudSim Plus 1.0
*/
public interface Resource extends ResourceCapacity {
/**
* An attribute that implements the Null Object Design Pattern for {@link Resource}
* objects.
*/
Resource NULL = new ResourceNull();
/**
* Checks if this object is instance of a given class.
* @param classWanted the class to verify if the object is instance of
* @return true if the object is instance of the given class, false otherwise
*/
default boolean isSubClassOf(final Class classWanted) {
return classWanted.isAssignableFrom(this.getClass());
}
/**
* Gets the amount of the resource that is available (free).
*
* @return the amount of available resource
*/
long getAvailableResource();
/**
* Gets the current total amount of allocated resource.
*
* @return amount of allocated resource
*/
long getAllocatedResource();
/**
* Checks if there the capacity required for the given resource is available (free)
* at this resource. This method is commonly used to check if there is a specific
* amount of resource free at a physical resource (this Resource instance)
* that is required by a virtualized resource (the given Resource).
*
* @param resource the resource to check if its capacity is available at the current resource
* @return true if the capacity required by the given Resource is free; false otherwise
* @see #isAmountAvailable(long)
*/
default boolean isAmountAvailable(Resource resource){
return isAmountAvailable(resource.getCapacity());
}
/**
* Checks if there is a specific amount of resource available (free),
* where such amount is a double value that will be converted to long.
*
* This method is just a shorthand to avoid explicitly converting
* a double to long.
*
* @param amountToCheck the amount of resource to check if is free.
* @return true if the specified amount is free; false otherwise
* @see #isAmountAvailable(long)
*/
default boolean isAmountAvailable(double amountToCheck){
return isAmountAvailable((long)amountToCheck);
}
/**
* Checks if there is a specific amount of resource available (free).
* @param amountToCheck the amount of resource to check if is free.
* @return true if the specified amount is free; false otherwise
*/
boolean isAmountAvailable(long amountToCheck);
/**
* Gets the measurement unit of this resource.
* @return
*/
String getUnit();
/**
* Checks if the resource is full or not.
*
* @return true if the storage is full, false otherwise
*/
default boolean isFull() {
return getAvailableResource() <= 0;
}
/**
* Gets the current percentage of resource utilization in scale from 0 to 1.
* It is the percentage of the total resource capacity that is currently allocated.
* @return current resource utilization (allocation) percentage in scale from 0 to 1
*/
default double getPercentUtilization() {
return getCapacity() > 0 ? getAllocatedResource() / (double)getCapacity() : 0.0;
}
}