/**
 *  TED5Tuple.java
 *
 *  This class simulates a 5-Tuple in a Turing Machine.
 *  The 5 Data fields are: 
 *       Initial State: The state you are in.
 *       Final State: The state you will transition to.
 *		 Character Read: The character at the current position of the tape head.
 *		 Character to be Written: The character to be written at the position of the tape head.
 *		 Direction to move: Direction in which to move the tape head.
 *
 *  Copyright 2005 Ben Pfistner and Jason Emmons
 */

public class TED5tuple
{
	String initialState;
	String finalState;
	char readChar;
	char writeChar;
	char dir;
	
	//Constructor
	public TED5tuple()
	{}

	/**
	 *  setInitialState()
	 *
	 *  @param  the state we are currently in
	 *
	 */
	public void setInitialState(String state)
	{
		initialState = state;
	}
	
	/**
	 *  getInitialState()
	 *
	 *  @return  the state we are currently in
	 *
	 */
	public String getInitialState()
	{
		return initialState;
	}
	
	/**
	 *  setFinalState()
	 *
	 *  @param  the state we will transition to from this 5-Tuple
	 *
	 */
	public void setFinalState(String state)
	{
		finalState = state;
	}
	
	/**
	 *  getFinalState()
	 *
	 *  @return  the next state
	 *
	 */
	public String getFinalState()
	{
		return finalState;
	}
	
	/**
	 *  setReadChar()
	 *
	 *  @param  the character we read 
	 *
	 */
	public void setReadChar(char read)
	{
		readChar = read;
	}
	
	/**
	 *  getReadChar()
	 *
	 *  @return  the character to be read
	 *
	 */
	public char getReadChar()
	{
		return readChar;
	}
	
	/**
	 *  setWriteChar()
	 *
	 *  @param  the charcter to be written
	 *
	 */
	public void setWriteChar(char write)
	{
		writeChar = write;
	}
	
	/**
	 *  getWriteChar()
	 *
	 *  @return  the character to be written
	 *
	 */
	public char getWriteChar()
	{
		return writeChar;
	}
	
	/**
	 *  setDirection()
	 *
	 *  @param the direction for this 
	 *
	 */
	public void setDirection(char direction)
	{
		dir = direction;
	}
	
	/**
	 *  getDirection()
	 *
	 *  @return  the direction
	 *
	 */
	public char getDirection()
	{
		return dir;
	}
	
	/**
	 *  toString()
	 *
	 *  This method tells a 5tuple how to write itself out as a string
	 *
	 *  @return  the entire 5tuple as a string
	 *
	 */
	public String toString()
	{
		String outputString = "(";
		outputString = outputString.concat(initialState);
		outputString = outputString.concat(", ");
		outputString = outputString.concat(""+readChar);
		outputString = outputString.concat(", ");
		outputString = outputString.concat(""+writeChar);
		outputString = outputString.concat(", ");
		outputString = outputString.concat(""+dir);
		outputString = outputString.concat(", ");
		outputString = outputString.concat(finalState);
		outputString = outputString.concat(")");
		
		return outputString;
	}
	
	public static void main(String [] args)
	{
		TED5tuple foo = new TED5tuple();
		
		foo.setInitialState("Initial State");	
		System.out.println(foo.getInitialState());	
	
		
		foo.setFinalState("final State");	
		System.out.println(foo.getFinalState());	
		
		foo.setReadChar('A');
		System.out.println(foo.getReadChar());
		
		foo.setWriteChar('B');
		System.out.println(foo.getWriteChar());
		
		foo.setDirection('A');
		System.out.println(foo.getDirection());
		
	}
}