/*
 * GenerateUpToLength.cpp
 *
 *  Created on: 22. 3. 2014
 *	  Author: Jan Travnicek
 */

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

namespace {

auto GenerateUpToLengthEpsilonFreeCFG = registration::AbstractRegister < grammar::generate::GenerateUpToLength, ext::trie < DefaultSymbolType, bool >, const grammar::EpsilonFreeCFG < > &, unsigned > ( grammar::generate::GenerateUpToLength::generate, "grammar", "length" ).setDocumentation (
"Implements the construction of index of all strings generated by given grammar shorter than given size.\n\
\n\
@param grammar the given grammar generating the language\n\
@param length the limiting size of considered strings\n\
@return trie where for each node the path from root to the node represents a string and a boolean flag determines whether the string is in the language or not." );

auto GenerateUpToLengthGNF = registration::AbstractRegister < grammar::generate::GenerateUpToLength, ext::trie < DefaultSymbolType, bool >, const grammar::GNF < > &, unsigned > ( grammar::generate::GenerateUpToLength::generate, "grammar", "length" ).setDocumentation (
"Implements the construction of index of all strings generated by given grammar shorter than given size.\n\
\n\
@param grammar the given grammar generating the language\n\
@param length the limiting size of considered strings\n\
@return trie where for each node the path from root to the node represents a string and a boolean flag determines whether the string is in the language or not." );

auto GenerateUpToLengthCNF = registration::AbstractRegister < grammar::generate::GenerateUpToLength, ext::trie < DefaultSymbolType, bool >, const grammar::CNF < > &, unsigned > ( grammar::generate::GenerateUpToLength::generate, "grammar", "length" ).setDocumentation (
"Implements the construction of index of all strings generated by given grammar shorter than given size.\n\
\n\
@param grammar the given grammar generating the language\n\
@param length the limiting size of considered strings\n\
@return trie where for each node the path from root to the node represents a string and a boolean flag determines whether the string is in the language or not." );

auto GenerateUpToLengthLeftRG = registration::AbstractRegister < grammar::generate::GenerateUpToLength, ext::trie < DefaultSymbolType, bool >, const grammar::LeftRG < > &, unsigned > ( grammar::generate::GenerateUpToLength::generate, "grammar", "length" ).setDocumentation (
"Implements the construction of index of all strings generated by given grammar shorter than given size.\n\
\n\
@param grammar the given grammar generating the language\n\
@param length the limiting size of considered strings\n\
@return trie where for each node the path from root to the node represents a string and a boolean flag determines whether the string is in the language or not." );

auto GenerateUpToLengthRightRG = registration::AbstractRegister < grammar::generate::GenerateUpToLength, ext::trie < DefaultSymbolType, bool >, const grammar::RightRG < > &, unsigned > ( grammar::generate::GenerateUpToLength::generate, "grammar", "length" ).setDocumentation (
"Implements the construction of index of all strings generated by given grammar shorter than given size.\n\
\n\
@param grammar the given grammar generating the language\n\
@param length the limiting size of considered strings\n\
@return trie where for each node the path from root to the node represents a string and a boolean flag determines whether the string is in the language or not." );

} /* namespace */

