codice:
public Vector <String> globalPart(String part, int k, Graph gr,Graph Smi, Graph Sma)
{
Node aux;
String[] pieces;
Vector <String> global = new Vector <String>();
Graph Smin = Smi;
Graph Smax = Sma;
Graph g = gr;
//System.out.println("Entro nel for che scorre partitions");
pieces = part.split("-");
for(int j=0; j<pieces.length; j++)
{
aux = searchNode(pieces[j], Smax); //Questo metodo non modifica Smax, cerca dentro l'oggetto
if(aux.getName() != "" && aux instanceof Input)
{
if((isShared(aux.getOutFlow(), Smin))!= -1)
{
Smin.getFlows().get(isShared(aux.getOutFlow(), Smin)).getEndNode().setMark(0); //QUESTO METODO e' uno di quelli che modificano Smin
}
}
}
if(Smin.equals(leftMarkedOK(Smin, Smin.getOutputs(), Smax)) == false )
{
Smin = leftMarkedOK(Smin, Smin.getOutputs(), Smax); //ANCHE QUESTO metodo modifica Smin
backTowardsPropagation(g, Smin, Smax); //ANCHE QUESTO metodo modifica
}
Vector <String> localSmin = localDiagnosis(Smin, this); //Questo metodo non cambia Smin
Node s;
if(localSmin.isEmpty())
global.add(part);
else
{
for(int l=0; l<localSmin.size(); l++)
{
pieces = part.split("-");
if(k == 0)
{
for(int p=0; p<pieces.length; p++)
global.add(localSmin.get(l)+pieces[p]);
}
else
for(int p=0; p<pieces.length; p++)
{
/*s -> nodo cercato in Smax dato il nome;
* e' un nodo di ingresso*/
s = searchNode(pieces[p],Smax);
/*
* cerchiamo se e' condiviso in Smin, dati i suoi flussi di uscita
* */
if(isShared(s.getOutFlow(), Smin) != -1)
global.add(localSmin.get(l)+pieces[p]);
else
{
if(!(global.contains(localSmin.get(l))))
global.add(localSmin.get(l));
}
}
}
}
return global;
}