package vroom.common.modeling.dataModel.attributes;
import vroom.common.modeling.dataModel.Vehicle;
/**
* <code>ITrailer</code> is an interface for classes that will describe the trailer(s) associated with a vehicle.
*
* @param <C>
* is the type used to represent the capacities (dimensions) of a trailer. Common values would be
* {@link Integer} or {@link Double} for the CVRP.
* @author Victor Pillac, <a href="http://uniandes.edu.co">Universidad de Los Andes</a> - <a
* href="http://copa.uniandes.edu.co">Copa</a>, <a href="http://www.emn.fr">Ecole des Mines de Nantes</a>-<a
* href="http://www.irccyn.ec-nantes.fr/irccyn/d/en/equipes/Slp">SLP</a>
* @see Vehicle
*/
public interface ITrailer<C> extends IVehicleAttribute {
/**
* Number of trailers.
*
* @return the number of trailer(s) described by this instance
*/
public int getTrailerCount();
/**
* Getter for the trailer capacity.
*
* @return the capacity of this trailer
* @see #getCapacity(int, int)
* @see #getCapacity(int)
* @see Vehicle#getCapacity()
*/
public C getCapacity();
/**
* Getter for the trailer capacity.
*
* @param trailer
* the index of the considered trailer
* @return the capacity of the
* @see #getCapacity(int, int)
* @see #getCapacity()
* @see Vehicle#getCapacity()
*/
public C getCapacity(int trailer);
/**
* Getter for the trailer capacity for a given product.
*
* @param trailer
* the index of the considered trailer
* @param product
* the index of the considered product
* @return the capacity of the for the
* @see #getCapacity(int, int)
* @see #getCapacity()
* @see Vehicle#getCapacity(int)
*/
public C getCapacity(int trailer, int product);
}