package lnsc.page;
import java.io.Serializable;

/** State representation converter, use to convert a state into a real-vector.
 *
 * <p>State representations are assumed serializable! Episode state information
 * should be transient (only information about how to generate the
 * representation)!</p>
 *
 * @author Francois Rivest
 * @version 1.3
 */

public interface StateRepresentation extends Serializable {

    /** Converts the state into a vector of real based on specific representation.
	 *  @param      s     State to be converted.
	 *  @return     Real vector representation of the state.
	 */
	public double[] getRepresentation(State s);

	/** Indicates the number of values in the state representation.
	 *  @return    Number of outputs.
	 */
	public int getOutputCount();

	/** Indicates whether or not the function output depends solely of the
	 * current state (and not of the previous state is has processed).
	 * (Any such internal state use for next computation should be in transient
	 * variables and not being serialized. They should be reseted on reset.)
	 * @return    <code>true</code> if output depends solely on current input
	 *            <code>false</code> otherwise.
	 */
	boolean isStateless();

	/** Reset internal transient state for non stateless functions. */
	public void reset();

}