package buffalo.transportNetwork;
/**
Exemple d'implémentation de l'interface
<CODE>FlowableArc</CODE>, représente une arête
du réseau de transport.
*/
public class Arc implements FlowableArc
{
/*-------------------------------------------------*/
/**
Capacité minimale de l'arc,
ie. borne inférieure pour le flot.
*/
private double minCapacity;
/**
Capacité maximale de l'arc,
ie. borne supérieure pour le flot.
*/
private double maxCapacity;
/**
Valeur du flot circulant dans l'arc...
*/
private double flowValue;
/**
Sommet dont l'arête courante "part".
*/
private Vertex inVertex;
/**
Sommet dans lequel l'arête courante "arrive".
*/
private Vertex outVertex;
/*-------------------------------------------------*/
/**
Une arête se construit à partir de
deux sommets, une borne inférieure et
une borne supérieure. Ce constructeur
se charge aussi d'invoquer les
<CODE>add**Arc(this)</CODE>.
*/
public Arc(Vertex inVertex, Vertex outVertex,
double minCapacity, double maxCapacity)
{
this.inVertex=inVertex;
this.outVertex=outVertex;
this.minCapacity=minCapacity;
this.maxCapacity=maxCapacity;
this.inVertex.addOutArc(this);
this.outVertex.addInArc(this);
}
/*-------------------------------------------------*/
/**
Retourne la borne inférieure de la
capacité de l'arc.
*/
public double getMinCapacity()
{
return minCapacity;
}
/*-------------------------------------------------*/
/**
Retourne la borne supérieure de la
capacité de l'arc.
*/
public double getMaxCapacity()
{
return maxCapacity;
}
/*-------------------------------------------------*/
/**
Retourne la valeur du flot.
*/
public double getFlowValue()
{
return flowValue;
}
/*-------------------------------------------------*/
/**
Pour augmenter le flot dans le sens conforme.
*/
public void increaseConformFlow(double increment)
{
flowValue += increment;
}
/*-------------------------------------------------*/
/**
Pour augmenter le flot dans le sens non conforme.
*/
public void increaseUnconformFlow(double increment)
{
flowValue = flowValue - increment;
}
/*-------------------------------------------------*/
/**
Retourne la valeur résiduelle de l'arc
(si il est pris dans le sens conforme).
*/
public double getConformResidualValue()
{
if (maxCapacity != -1)
{
return (maxCapacity - flowValue);
}
else
{
return -1;
}
}
/*-------------------------------------------------*/
/**
Retourne la valeur résiduelle de l'arc
(si il est pris dans le sens non conforme).
*/
public double getUnconformResidualValue()
{
if(minCapacity != -1)
{
return (flowValue - minCapacity);
}
else
{
return -1;
}
}
/*-------------------------------------------------*/
/**
Retourne le sommet de "départ" de l'arc.
*/
public FlowableVertex getInVertex()
{
return inVertex;
}
/*-------------------------------------------------*/
/**
Retourne le sommet d'"arrivée" de l'arc.
*/
public FlowableVertex getOutVertex()
{
return outVertex;
}
/*-------------------------------------------------*/
/**
Retourne l'arête au format
chaîne de caractères
*/
public String toString()
{
String res = "{ min = ";
if (minCapacity > 0)
{
res += " unbound ";
}
else
{
res += minCapacity;
}
res += " max = ";
if (maxCapacity < 0)
{
res += " unbound ";
}
else
{
res += maxCapacity;
}
res += " flowValue = " + flowValue;
res += " outVertex = " + outVertex.getIndex();
res += " } ";
return res;
}
}