/*
 * SingleInitialStateEpsilonTransition.cpp
 *
 *  Created on: 6. 6. 2018
 *	  Author: Jan Travnicek
 */

#include "SingleInitialStateEpsilonTransition.h"
#include <registration/AlgoRegistration.hpp>

namespace {

auto SingleInitialStateMultiInitialStateNFA = registration::AbstractRegister < automaton::simplify::SingleInitialStateEpsilonTransition, automaton::EpsilonNFA < >, const automaton::MultiInitialStateNFA < > & > ( automaton::simplify::SingleInitialStateEpsilonTransition::convert, "automaton" ).setDocumentation (
"Converts multi-initial state automaton to a single-initial state automaton with the use of epsilon transitions.\n\
\n\
@param automaton automaton to convert\n\
@return an automaton equivalent to @p with only one initial state" );

auto SingleInitialStateMultiInitialStateEpsilonNFA = registration::AbstractRegister < automaton::simplify::SingleInitialStateEpsilonTransition, automaton::EpsilonNFA < >, const automaton::MultiInitialStateEpsilonNFA < > & > ( automaton::simplify::SingleInitialStateEpsilonTransition::convert, "automaton" ).setDocumentation (
"Converts multi-initial state epsilon automaton to a single-initial state automaton with the use of epsilon transitions.\n\
\n\
@param automaton automaton to convert\n\
@return an automaton equivalent to @p with only one initial state" );

auto SingleInitialStateDFA = registration::AbstractRegister < automaton::simplify::SingleInitialStateEpsilonTransition, automaton::DFA < >, const automaton::DFA < > & > ( automaton::simplify::SingleInitialStateEpsilonTransition::convert, "automaton" ).setDocumentation (
"No-op for deterministic finite automaton.\n\
\n\
@param automaton automaton to convert\n\
@return an automaton equivalent to @p with only one initial state" );

auto SingleInitialStateEpsilonNFA = registration::AbstractRegister < automaton::simplify::SingleInitialStateEpsilonTransition, automaton::EpsilonNFA < >, const automaton::EpsilonNFA < > & > ( automaton::simplify::SingleInitialStateEpsilonTransition::convert, "automaton" ).setDocumentation (
"No-op for epsilon nondeterministic finite automaton.\n\
\n\
@param automaton automaton to convert\n\
@return an automaton equivalent to @p with only one initial state" );

auto SingleInitialStateNFA = registration::AbstractRegister < automaton::simplify::SingleInitialStateEpsilonTransition, automaton::NFA < >, const automaton::NFA < > & > ( automaton::simplify::SingleInitialStateEpsilonTransition::convert, "automaton" ).setDocumentation (
"No-op for nondeterministic finite automaton.\n\
\n\
@param automaton automaton to convert\n\
@return an automaton equivalent to @p with only one initial state" );

auto SingleInitialStateCompactNFA = registration::AbstractRegister < automaton::simplify::SingleInitialStateEpsilonTransition, automaton::CompactNFA < >, const automaton::CompactNFA < > & > ( automaton::simplify::SingleInitialStateEpsilonTransition::convert, "automaton" ).setDocumentation (
"No-op for compact nondeterministic finite automaton.\n\
\n\
@param automaton automaton to convert\n\
@return an automaton equivalent to @p with only one initial state" );

auto SingleInitialStateExtendedNFA = registration::AbstractRegister < automaton::simplify::SingleInitialStateEpsilonTransition, automaton::ExtendedNFA < >, const automaton::ExtendedNFA < > & > ( automaton::simplify::SingleInitialStateEpsilonTransition::convert, "automaton" ).setDocumentation (
"No-op for extended nondeterministic finite automaton.\n\
\n\
@param automaton automaton to convert\n\
@return an automaton equivalent to @p with only one initial state" );

} /* namespace */
