package cap19.grafo;

import cap13.insieme.*;
import java.util.Iterator;

public class Nodo
{ private Insieme<Arco> archi;
  public Nodo()
  { archi = new InsiemeList<Arco>();
  }
  public boolean aggiungiArco(Arco a)
  { return archi.aggiungi(a);
  }
  public boolean rimuoviArco(Arco a)
  { return archi.rimuovi(a);
  }
  public void rimuoviAdiacenza(Nodo n)
  { Iterator<Nodo> i = nodiAdiacenti();
    while (i.hasNext())
    { Nodo m = i.next();
      if (m.equals(n))
        i.remove();
    }
  }
  public Iterator<Arco> archiUscenti()
  { return archi.iterator();
  }
  public Iterator<Nodo> nodiAdiacenti()
  { return new IteratoreNodi(archi.iterator());
  }
  private class IteratoreNodi implements Iterator<Nodo>
  { private Iterator<Arco> i;
    IteratoreNodi(Iterator<Arco> i)
    { this.i = i;
    }
    public Nodo next() throws IllegalStateException
    { return i.next().destinazione();
    }
    public boolean hasNext()
    { return i.hasNext();
    }
    public void remove() throws IllegalStateException
    { i.remove();
    }
  }
}
