package esprbooleane;

import java.util.*;

// la classe e' interna al package, quindi la dichiariamo
// non accessibile all'esterno (non public); quello che si
// vede all'esterno e' un Iterator

class IteratoreAnd implements Iterator<EspressioneBooleana> {

// quello che in effetti serve e' solo la lista di
// espressioni

  private List<EspressioneBooleana> lista;

// implementiamo l'iteratore usando un normale iteratore
// delle liste

  private Iterator<EspressioneBooleana> it;

// costruttore; questo non e' public: viene invocato solo
// dal metodo iteratoreAnd() di EspressioneAnd; qui viene
// anche creato l'iteratore

  IteratoreAnd(EspressioneAnd e) {
    lista=e.componenti;
    it=lista.iterator();
  }

// i metodi hasNext e next sono definiti semplicemente
// attraverso i corrispondenti metodi dell'iteratore
// sottostante

  public boolean hasNext() {
    return it.hasNext();
  }

  public EspressioneBooleana next() {
    return it.next();
  }

// dato che l'iteratore serve solo per leggere, non
// implementiamo il metodo opzionale remove

  public void remove() {
    throw new UnsupportedOperationException("Remove non implementato in IteratoreAnd");
  }

}
