Skip to content

Commit d1f30c2

Browse files
committed
added getRandomEmoji
1 parent 4300afb commit d1f30c2

File tree

3 files changed

+23
-1
lines changed

3 files changed

+23
-1
lines changed

src/Emoji/Emoji.cpp

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
#include <cassert>
44
#include <cctype>
55
#include <fstream>
6+
#include <random>
67
#include <regex>
78

89
namespace 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) {

src/Emoji/Emoji.hpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff 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);

src/EmojiModuleLib.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff 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;

0 commit comments

Comments
 (0)