Skip to content
Snippets Groups Projects
Commit 10cf8904 authored by Radovan Červený's avatar Radovan Červený
Browse files

changed RandomStringGenerator to allow bigger alphabets with integer symbols

parent 003303b7
No related branches found
No related tags found
1 merge request!15BP_cervera3 - automatic measurements, processing
......@@ -17,6 +17,20 @@ namespace string {
 
namespace generate {
 
string::LinearString RandomStringFactory::generateLinearString ( size_t size, size_t alphabetSize, bool randomizedAlphabet, bool integerSymbols ) {
if ( !integerSymbols ) return generateLinearString ( size, alphabetSize, randomizedAlphabet );
if ( alphabetSize <= 0 )
throw exception::AlibException ( "Alphabet size must be greater than 0." );
std::vector < alphabet::Symbol > elems;
for ( size_t i = 0; i < size; i++ )
elems.push_back ( alphabet::symbolFrom ( static_cast < int > ( std::random_devices::semirandom ( ) % alphabetSize ) ) );
return string::LinearString ( elems );
}
string::LinearString RandomStringFactory::generateLinearString ( size_t size, size_t alphabetSize, bool randomizedAlphabet ) {
if ( alphabetSize > 26 )
throw exception::AlibException ( "Too big alphabet." );
......
......@@ -17,6 +17,7 @@ namespace generate {
 
class RandomStringFactory {
public:
static string::LinearString generateLinearString ( size_t size, size_t alphabetSize, bool randomizedAlphabet, bool integerSymbols );
static string::LinearString generateLinearString ( size_t size, size_t alphabetSize, bool randomizedAlphabet );
static string::LinearString generateLinearString ( size_t size, std::set < alphabet::Symbol > alphabet );
};
......
......@@ -41,6 +41,9 @@ int main ( int argc, char * argv[] ) {
TCLAP::ValueArg < int > alphabetSize ( "", "terminals", "Number of terminals/alphabet size", false, 3, "integer" );
cmd.add ( alphabetSize );
 
TCLAP::SwitchArg integerSymbols ( "", "integerSymbols", "Use integer symbols instead of char symbols", false );
cmd.add ( integerSymbols );
TCLAP::SwitchArg randomizedAlphabet ( "", "randomizedTerminals", "Number of terminals/alphabet size", false );
cmd.add ( randomizedAlphabet );
 
......@@ -127,7 +130,7 @@ int main ( int argc, char * argv[] ) {
} else if ( type.getValue ( ) == "ST" ) {
measurements::start ( "Algorithm", measurements::Type::MAIN );
 
string::LinearString res = string::generate::RandomStringFactory::generateLinearString ( length.getValue ( ), alphabetSize.getValue ( ), randomizedAlphabet.getValue ( ) );
string::LinearString res = string::generate::RandomStringFactory::generateLinearString ( length.getValue ( ), alphabetSize.getValue ( ), randomizedAlphabet.getValue ( ), integerSymbols.getValue ( ) );
 
measurements::end ( );
measurements::start ( "Output write", measurements::Type::AUXILIARY );
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment