/*
 * Symbol.h
 *
 *  Created on: Apr 10, 2013
 *      Author: Jan Travnicek
 */

#ifndef SYMBOL_H_
#define SYMBOL_H_

#include <base/WrapperBase.hpp>
#include "SymbolBase.h"

#include <set>
#include <string>

#include <label/Label.h>

namespace alphabet {

/**
 * Wrapper around automata.
 */
class Symbol : public alib::WrapperBase < SymbolBase > {
	using alib::WrapperBase < SymbolBase >::WrapperBase;

public:
	explicit Symbol ( label::Label label );
	explicit Symbol ( int number );
	explicit Symbol ( char character );
	explicit Symbol ( std::string string );
	explicit Symbol ( const char * string );

	void inc ( );

	static const std::string & getXmlTagRefName() {
		static std::string xmlTagName = "SymbolRef";

		return xmlTagName;
	}
};

} /* namespace alphabet */

#endif /* SYMBOL_H_ */