package esprbooleane;

public class EspressioneOr extends EspressioneBooleana {

// componenti: le due sottoespressioni

  private EspressioneBooleana prima;
  private EspressioneBooleana seconda;

// costrutture 

  public EspressioneOr(EspressioneBooleana a, EspressioneBooleana b) {
    if((a==null)||(b==null))
      throw new RuntimeException("Tentativo di creazione di una EspressioneOr con componenti nulle");
    prima=a;
    seconda=b;
  }

// metodi get

  public EspressioneBooleana getPrima() {
    return prima;
  }

  public EspressioneBooleana getSeconda() {
    return seconda;
  }

// metodi standard

  public String toString() {
    return "["+prima+","+seconda+"]";
  }

  public boolean equals(Object o) {
    if(!this.stessaClasse(o))
      return false;

    EspressioneOr e=(EspressioneOr) o;

// le componenti non possono valere null

    return prima.equals(e.prima)&&seconda.equals(e.seconda);
  }

  public int hashCode() {
    return 5*prima.hashCode()+7*seconda.hashCode();
  }

// clone; qui e' necessario perche' vanno clonati i due
// oggetti EspressioneBooleana

  public Object clone() {
    EspressioneOr e=(EspressioneOr) super.clone();

    e.prima=(EspressioneBooleana) e.prima.clone();
    e.seconda=(EspressioneBooleana) e.seconda.clone();

    return e;
  }

}

