Add consts for emoji count and the maximum emoji length.

This commit is contained in:
levlam 2022-01-14 16:30:50 +03:00
parent b007cc7a2c
commit 4254320148

View File

@ -15,7 +15,8 @@
namespace td { namespace td {
bool is_emoji(Slice str) { bool is_emoji(Slice str) {
static const std::unordered_set<Slice, SliceHash> emojis = [] { constexpr size_t MAX_EMOJI_LENGTH = 35;
static const std::unordered_set<Slice, SliceHash> emojis = [MAX_EMOJI_LENGTH] {
Slice packed_emojis( Slice packed_emojis(
"eJyNnety27i2rV8lVfvf-XXul7frVmfZ6cS6kKJskrLj7tUUaUmOI1uObcUEWLUfJecBdledFzgaJIfJiUkyqyqAJ4wxJzE_QABF2fGPs_" "eJyNnety27i2rV8lVfvf-XXul7frVmfZ6cS6kKJskrLj7tUUaUmOI1uObcUEWLUfJecBdledFzgaJIfJiUkyqyqAJ4wxJzE_QABF2fGPs_"
"jdj7Plux_T9bFsjmV7LLfHsjuW_bsfF-ZY7LsfYXAsi3c_og_H8vuxfDyWT8dydizjY5kcy_RYZsfiHYt_LPNjKd79iI9f4z-P5Rg_" "jdj7Plux_T9bFsjmV7LLfHsjuW_bsfF-ZY7LsfYXAsi3c_og_H8vuxfDyWT8dydizjY5kcy_RYZsfiHYt_LPNjKd79iI9f4z-P5Rg_"
@ -196,6 +197,8 @@ bool is_emoji(Slice str) {
"k_7Ka1zcVL3hXdn00Rt-q2z8H2PhUzUUYdd7bf2_db5_9_8BRjaqUQ"); "k_7Ka1zcVL3hXdn00Rt-q2z8H2PhUzUUYdd7bf2_db5_9_8BRjaqUQ");
static string all_emojis_str = gzdecode(base64url_decode(packed_emojis).ok()).as_slice().str(); static string all_emojis_str = gzdecode(base64url_decode(packed_emojis).ok()).as_slice().str();
std::unordered_set<Slice, SliceHash> all_emojis; std::unordered_set<Slice, SliceHash> all_emojis;
constexpr size_t EMOJI_COUNT = 4682;
all_emojis.reserve(EMOJI_COUNT);
for (size_t i = 0; i < all_emojis_str.size(); i++) { for (size_t i = 0; i < all_emojis_str.size(); i++) {
CHECK(all_emojis_str[i] != ' '); CHECK(all_emojis_str[i] != ' ');
CHECK(all_emojis_str[i + 1] != ' '); CHECK(all_emojis_str[i + 1] != ' ');
@ -205,12 +208,13 @@ bool is_emoji(Slice str) {
} }
CHECK(j < all_emojis_str.size()); CHECK(j < all_emojis_str.size());
all_emojis.insert(Slice(&all_emojis_str[i], &all_emojis_str[j])); all_emojis.insert(Slice(&all_emojis_str[i], &all_emojis_str[j]));
CHECK(j - i < 40); CHECK(j - i <= MAX_EMOJI_LENGTH);
i = j; i = j;
} }
CHECK(all_emojis.size() == EMOJI_COUNT);
return all_emojis; return all_emojis;
}(); }();
if (str.size() >= 40) { if (str.size() > MAX_EMOJI_LENGTH) {
return false; return false;
} }
return emojis.count(str) != 0; return emojis.count(str) != 0;