Loading alib2algo/src/string/generate/RandomStringFactory.cpp +13 −5 Original line number Diff line number Diff line Loading @@ -31,16 +31,17 @@ string::LinearString < std::string > string::generate::RandomStringFactory::gene if ( alphabetSize <= 0 ) throw exception::CommonException ( "Alphabet size must be greater than 0." ); ext::vector < std::string > symbols; ext::vector < std::string > alphabet; alphabet.reserve ( 'z' - 'a' + 1 ); for(char i = 'a'; i <= 'z'; i++) symbols.push_back ( std::string ( 1, i ) ); alphabet.emplace_back ( 1, i ); if ( randomizedAlphabet ) shuffle ( symbols.begin ( ), symbols.end ( ), ext::random_devices::semirandom ); if ( randomizedAlphabet ) shuffle ( alphabet.begin ( ), alphabet.end ( ), ext::random_devices::semirandom ); ext::set < std::string > alphabet ( symbols.begin ( ), symbols.begin ( ) + alphabetSize ); alphabet.resize ( alphabetSize ); return string::generate::RandomStringFactory::generateLinearString ( size, alphabet ); return string::generate::RandomStringFactory::generateLinearString ( size, std::move ( alphabet ) ); } } /* namespace string::generate */ Loading Loading @@ -71,4 +72,11 @@ auto GenerateLinearString3 = registration::AbstractRegister < string::generate:: @param alphabet alphabet of the generated string\n\ @return random string" ); auto GenerateLinearString4 = registration::AbstractRegister < string::generate::RandomStringFactory, string::LinearString < >, size_t, ext::vector < DefaultSymbolType > > ( string::generate::RandomStringFactory::generateLinearString, abstraction::AlgorithmCategories::AlgorithmCategory::DEFAULT, "size", "alphabet" ).setDocumentation ( "Generates a random string of given size\n\ \n\ @param size the length of the generated string\n\ @param alphabet alphabet of the generated string\n\ @return random string" ); } /* namespace */ alib2algo/src/string/generate/RandomStringFactory.h +18 −2 Original line number Diff line number Diff line Loading @@ -53,19 +53,35 @@ public: */ template < class SymbolType > static string::LinearString < SymbolType > generateLinearString ( size_t size, ext::set < SymbolType > alphabet ); /** * Generates a random string of given size * \tparam SymbolType the type of symbols of the random string * * \param size the length of the generated string * \param alphabet alphabet of the generated string * * \return random string */ template < class SymbolType > static string::LinearString < SymbolType > generateLinearString ( size_t size, ext::vector < SymbolType > alphabet ); }; template < class SymbolType > string::LinearString < SymbolType > RandomStringFactory::generateLinearString ( size_t size, ext::set < SymbolType > alphabet ) { return generateLinearString ( size, ext::vector < SymbolType > ( alphabet.begin ( ), alphabet.end ( ) ) ); } template < class SymbolType > string::LinearString < SymbolType > RandomStringFactory::generateLinearString ( size_t size, ext::vector < SymbolType > alphabet ) { if ( alphabet.empty ( ) ) throw exception::CommonException ( "Alphabet size must be greater than 0." ); ext::vector < SymbolType > alphabetList ( alphabet.begin ( ), alphabet.end ( ) ); ext::vector < SymbolType > elems; for ( size_t i = 0; i < size; i++ ) elems.push_back ( alphabetList[ext::random_devices::semirandom ( ) % alphabetList.size ( )] ); elems.push_back ( alphabet [ ext::random_devices::semirandom ( ) % alphabet.size ( ) ] ); return string::LinearString < SymbolType > ( elems ); } Loading Loading
alib2algo/src/string/generate/RandomStringFactory.cpp +13 −5 Original line number Diff line number Diff line Loading @@ -31,16 +31,17 @@ string::LinearString < std::string > string::generate::RandomStringFactory::gene if ( alphabetSize <= 0 ) throw exception::CommonException ( "Alphabet size must be greater than 0." ); ext::vector < std::string > symbols; ext::vector < std::string > alphabet; alphabet.reserve ( 'z' - 'a' + 1 ); for(char i = 'a'; i <= 'z'; i++) symbols.push_back ( std::string ( 1, i ) ); alphabet.emplace_back ( 1, i ); if ( randomizedAlphabet ) shuffle ( symbols.begin ( ), symbols.end ( ), ext::random_devices::semirandom ); if ( randomizedAlphabet ) shuffle ( alphabet.begin ( ), alphabet.end ( ), ext::random_devices::semirandom ); ext::set < std::string > alphabet ( symbols.begin ( ), symbols.begin ( ) + alphabetSize ); alphabet.resize ( alphabetSize ); return string::generate::RandomStringFactory::generateLinearString ( size, alphabet ); return string::generate::RandomStringFactory::generateLinearString ( size, std::move ( alphabet ) ); } } /* namespace string::generate */ Loading Loading @@ -71,4 +72,11 @@ auto GenerateLinearString3 = registration::AbstractRegister < string::generate:: @param alphabet alphabet of the generated string\n\ @return random string" ); auto GenerateLinearString4 = registration::AbstractRegister < string::generate::RandomStringFactory, string::LinearString < >, size_t, ext::vector < DefaultSymbolType > > ( string::generate::RandomStringFactory::generateLinearString, abstraction::AlgorithmCategories::AlgorithmCategory::DEFAULT, "size", "alphabet" ).setDocumentation ( "Generates a random string of given size\n\ \n\ @param size the length of the generated string\n\ @param alphabet alphabet of the generated string\n\ @return random string" ); } /* namespace */
alib2algo/src/string/generate/RandomStringFactory.h +18 −2 Original line number Diff line number Diff line Loading @@ -53,19 +53,35 @@ public: */ template < class SymbolType > static string::LinearString < SymbolType > generateLinearString ( size_t size, ext::set < SymbolType > alphabet ); /** * Generates a random string of given size * \tparam SymbolType the type of symbols of the random string * * \param size the length of the generated string * \param alphabet alphabet of the generated string * * \return random string */ template < class SymbolType > static string::LinearString < SymbolType > generateLinearString ( size_t size, ext::vector < SymbolType > alphabet ); }; template < class SymbolType > string::LinearString < SymbolType > RandomStringFactory::generateLinearString ( size_t size, ext::set < SymbolType > alphabet ) { return generateLinearString ( size, ext::vector < SymbolType > ( alphabet.begin ( ), alphabet.end ( ) ) ); } template < class SymbolType > string::LinearString < SymbolType > RandomStringFactory::generateLinearString ( size_t size, ext::vector < SymbolType > alphabet ) { if ( alphabet.empty ( ) ) throw exception::CommonException ( "Alphabet size must be greater than 0." ); ext::vector < SymbolType > alphabetList ( alphabet.begin ( ), alphabet.end ( ) ); ext::vector < SymbolType > elems; for ( size_t i = 0; i < size; i++ ) elems.push_back ( alphabetList[ext::random_devices::semirandom ( ) % alphabetList.size ( )] ); elems.push_back ( alphabet [ ext::random_devices::semirandom ( ) % alphabet.size ( ) ] ); return string::LinearString < SymbolType > ( elems ); } Loading