#include <iostream>

/**
 * Simple class implementing variable for ternary logic.
 */
class Ternary
{
	public:
		//internal state representation
		enum ty_state
		{
			TY_TRUE=0,
			TY_FALSE=1,
			TY_UNKNOWN=2
		};

		//constructor/destructor
		Ternary(unsigned short state);
		virtual ~Ternary();

		//operators
		Ternary operator =(const Ternary& that);
		bool operator ==(const Ternary& that);
		bool operator !=(const Ternary& that);
		Ternary operator &&(const Ternary& that) const;
		Ternary operator ||(const Ternary& that) const;
		Ternary operator !() const;

		//accessor for internal state
		unsigned short getState() const;

	private:
		unsigned short theState;
};

//print ternary variable in text form
std::ostream& operator<<(std::ostream& ostream, const Ternary& ternary);
