File tree Expand file tree Collapse file tree 3 files changed +23
-1
lines changed
Expand file tree Collapse file tree 3 files changed +23
-1
lines changed Original file line number Diff line number Diff line change 33#include < cassert>
44#include < cctype>
55#include < fstream>
6+ #include < random>
67#include < regex>
78
89namespace dotnamecpp ::emoji {
@@ -21,6 +22,25 @@ namespace dotnamecpp::emoji {
2122
2223 Emoji::~Emoji () {}
2324
25+ std::string Emoji::getRandomEmoji () {
26+ // modern C++ way to generate random number
27+ std::random_device rd;
28+ std::mt19937 gen (rd ());
29+ std::uniform_int_distribution<> dis (0 , emojiMap_.size () - 1 );
30+
31+ if (emojiMap_.empty ()) {
32+ return getEmoji ();
33+ }
34+ auto it = emojiMap_.begin ();
35+ std::advance (it, dis (gen));
36+ const auto &emojiEntry = it->first ;
37+ char8_t buffer[kMaxBufferSize ];
38+ char8_t *end = encodeUtf8Sequence (reinterpret_cast <const char32_t *>(emojiEntry.c_str ()),
39+ emojiEntry.size (), buffer);
40+ *end = ' \0 ' ;
41+ return std::string (reinterpret_cast <char *>(buffer));
42+ }
43+
2444 std::string Emoji::getEmoji () { return " 😀" ; }
2545
2646 std::string Emoji::getEmoji (char32_t *code, size_t totalCodePoints) {
Original file line number Diff line number Diff line change @@ -22,6 +22,7 @@ namespace dotnamecpp::emoji {
2222
2323 std::map<std::u32string, EmojiMap> emojiMap_;
2424
25+ std::string getRandomEmoji ();
2526 std::string getEmoji ();
2627 std::string getEmoji (char32_t *code, size_t totalCodePoints);
2728 std::string getEmoji (int32_t *code, size_t totalCodePoints);
Original file line number Diff line number Diff line change @@ -14,7 +14,8 @@ namespace dotnamecpp::v1 {
1414
1515 emoji_ = std::make_unique<dotnamecpp::emoji::Emoji>(utilsComponents);
1616 emoji_->emojiChainTest <false >();
17- logger_->infoStream () << " Static emoji: " << emoji_->getEmoji ();
17+ logger_->infoStream () << " Static emoji: " << emoji_->getEmoji () << " , Random emoji: "
18+ << emoji_->getRandomEmoji ();
1819
1920 logger_->infoStream () << libName_ << " initialized ..." ;
2021 isInitialized_ = true ;
You can’t perform that action at this time.
0 commit comments