/*
 * RandomAutomatonFactory.h
 *
 *  Created on: 27. 3. 2014
 *	  Author: Tomas Pecka
 */

#ifndef RANDOM_AUTOMATON_FACTORY_H_
#define RANDOM_AUTOMATON_FACTORY_H_

#include <deque>
#include <set>

#include <automaton/FSM/NFA.h>

namespace automaton {

namespace generate {

class RandomAutomatonFactory {
public:
	static automaton::NFA < > generateNFA( size_t statesCount, ext::set<DefaultSymbolType> alphabet, double density );
	static automaton::NFA < > generateNFA( size_t statesCount, size_t alphabetSize, bool randomizedAlphabet, double density );

private:
	static automaton::NFA < > LeslieConnectedNFA( size_t n, const ext::deque<DefaultSymbolType> & alphabet, double density );
};

} /* namespace generate */

} /* namespace automaton */

#endif /* RANDOM_AUTOMATON_FACTORY_H_ */