package framework;

/**
 * This interface represents the state of affairs of a problem-solving
 * situation.  Implementing classes will store the representation details
 * of concrete problem states.
 */
public interface State {
    
    /**                                                                                                 
     * Tests for equality between this state and the argument state.                                    
     * The argument state will need to be cast to a specific class type.                                                    
     * @param other the state to test against this state                                                
     * @return whether the states are equal                                                             
    */
    public boolean equals(Object other);
    
    /**                                                                                                 
     *Creates a primitive, non-GUI representation of this State object.                        
     *@return the string representation of this state                                       
    */
    public String toString();

    /**
     * Computes and returns an estimate of the number of moves required
     * to get from this state to the final state of the problem.
     * @param goal the final state
     * @return the estimate
     */
    public int getHeuristic(State goal);

}