content: package aima.core.probability.domain;
  
  import java.util.Collections;
  import java.util.LinkedHashSet;
  import java.util.Set;
  
  /**
   * Artificial Intelligence A Modern Approach (3rd Edition): page 486.
   * 
   * A Boolean random variable has the domain {true,false}.
   * 
   * @author Ciaran O'Reilly.
   */
  public class BooleanDomain extends AbstractFiniteDomain {
  
  	private static Set<Boolean> _possibleValues = null;
  	static {
  		// Keep consistent order
  		_possibleValues = new LinkedHashSet<Boolean>();
  		_possibleValues.add(Boolean.TRUE);
  		_possibleValues.add(Boolean.FALSE);
  		// Ensure cannot be modified
  		_possibleValues = Collections.unmodifiableSet(_possibleValues);
  	}
  
  	public BooleanDomain() {
  		indexPossibleValues(_possibleValues);
  	}
  
  	//
  	// START-Domain
  	@Override
  	public int size() {
  		return 2;
  	}
  
  	@Override
  	public boolean isOrdered() {
  		return false;
  	}
  
  	// END-Domain
  	//
  
  	//
  	// START-DiscreteDomain
  	@Override
  	public Set<Boolean> getPossibleValues() {
  		return _possibleValues;
  	}
  
  	// END-DiscreteDomain
  	//
  
  	@Override
  	public boolean equals(Object o) {
  		return o instanceof BooleanDomain;
  	}
  
  	@Override
  	public int hashCode() {
  		return _possibleValues.hashCode();
  	}
  }
  