From d34c45fa5a50ac71cd0a4d57367c45e3128d3cb3 Mon Sep 17 00:00:00 2001 From: Bartosz Taudul Date: Wed, 10 Jun 2026 00:27:18 +0200 Subject: [PATCH] Use variable structure for random name generator. --- profiler/src/profiler/TracyNameGen.cpp | 35 +++++++++++++++++++++----- 1 file changed, 29 insertions(+), 6 deletions(-) diff --git a/profiler/src/profiler/TracyNameGen.cpp b/profiler/src/profiler/TracyNameGen.cpp index 561d2d95..5f3b2681 100644 --- a/profiler/src/profiler/TracyNameGen.cpp +++ b/profiler/src/profiler/TracyNameGen.cpp @@ -1,6 +1,9 @@ +#include #include +#include #include #include +#include #include "TracyNameGen.hpp" @@ -158,6 +161,8 @@ constexpr std::array NameBanks = { NameBank { CosmosAdjectives, CosmosNouns, sizeof(CosmosAdjectives) / sizeof(CosmosAdjectives[0]), sizeof(CosmosNouns) / sizeof(CosmosNouns[0]) }, }; +constexpr std::array NameStructure = { "an", "aan", "nn" }; + std::string GenerateAbstractName() { @@ -165,14 +170,32 @@ std::string GenerateAbstractName() std::default_random_engine gen( rd() ); std::uniform_int_distribution dist( 0, UINT32_MAX ); - const auto bank = NameBanks[dist( gen ) % NameBanks.size()]; - if( dist( gen ) % 6 != 0 ) + const auto baseBank = NameBanks[dist( gen ) % NameBanks.size()]; + const char* structure = NameStructure[dist( gen ) % NameStructure.size()]; + + std::vector parts; + while( *structure ) { - return std::string( bank.adjectives[dist( gen ) % bank.numAdjectives] ) + " " + std::string( bank.nouns[dist( gen ) % bank.numNouns] ); + const auto type = *structure++; + assert( type == 'a' || type == 'n' ); + const auto bank = dist( gen ) % 6 == 0 ? NameBanks[dist( gen ) % NameBanks.size()] : baseBank; + for(;;) + { + auto part = std::string( type == 'a' ? bank.adjectives[dist( gen ) % bank.numAdjectives] : bank.nouns[dist( gen ) % bank.numNouns] ); + if( std::ranges::find( parts, part ) == parts.end() ) + { + parts.emplace_back( std::move( part ) ); + break; + } + } + }; + + std::string ret = parts[0]; + for( size_t i=1; i