/**
 * @author Scott Douglas ( scott@scottdouglas.net )
 */
public class HuffmanCharacter implements Comparable {
	private char character;
	private int frequency;
	
	public HuffmanCharacter( char charValue ) {
		character = charValue;
		frequency = 0;
	}
	
	public HuffmanCharacter( int newFrequency ) {
		character = '\0';
		frequency = newFrequency;
	}
	
	public HuffmanCharacter( char charValue, int newFrequency ) {
		character = charValue;
		frequency = newFrequency;
	}
	
	public void incrementFrequency() {
		frequency++;
	}
	
	/**
	 * @return
	 */
	public int getFrequency() {
		return frequency;
	}

	/**
	 * @return
	 */
	public char getCharacter() {
		return character;
	}

	/**
	 * @param i
	 */
	public void setFrequency( int i ) {
		frequency = i;
	}

	/**
	 * @param character
	 */
	public void setCharacter( char newCharacter ) {
		character = newCharacter;
	}

	public int compareTo( Object object1 )  {
		HuffmanCharacter character = ( HuffmanCharacter ) object1;
		int compareValue = 0;

		if ( getFrequency() < character.getFrequency() ) {
			compareValue = -1;
		} else if ( getFrequency() > character.getFrequency() ) {
			compareValue = 1;
		} else {
			compareValue = 0;
		}
		return compareValue;
	}
	
	public boolean equals( Object object ) {
		boolean areEqual = false;
	
		if ( object instanceof HuffmanCharacter ) {
			HuffmanCharacter other = ( HuffmanCharacter ) object;
			areEqual = getCharacter() == other.getCharacter();
		}
	
		return areEqual;
	}
	
	public String toString() {
		String representation;
		
		if ( character == '\n' ) {
			representation ="[ line feed," + frequency + " ]";	
		} else if ( character == '\r' ) {
			representation = "[ carriage return," + frequency + " ]";	
		} else {
			representation = "[ " + character +"," + frequency + " ]";	
		}
		return representation;
	}
}

