From 22ed61e1b78aa1d7581d648e25517953ba6168f5 Mon Sep 17 00:00:00 2001 From: levlam Date: Wed, 9 Feb 2022 17:05:27 +0300 Subject: [PATCH] More FlatHashMap usages. --- td/telegram/ConfigShared.cpp | 2 +- td/telegram/ConfigShared.h | 4 ++-- tdactor/td/actor/impl/Scheduler-decl.h | 4 ++-- tddb/td/db/BinlogKeyValue.h | 15 +++++++-------- tddb/td/db/KeyValueSyncInterface.h | 7 ++++--- tdnet/td/net/GetHostByNameActor.cpp | 7 +++---- tdnet/td/net/GetHostByNameActor.h | 6 +++--- tdnet/td/net/SslStream.cpp | 4 ++-- tdutils/td/utils/OptionParser.cpp | 7 +++---- tdutils/td/utils/translit.cpp | 14 +++++++------- 10 files changed, 34 insertions(+), 36 deletions(-) diff --git a/td/telegram/ConfigShared.cpp b/td/telegram/ConfigShared.cpp index 412a6947d..5fa480be0 100644 --- a/td/telegram/ConfigShared.cpp +++ b/td/telegram/ConfigShared.cpp @@ -58,7 +58,7 @@ string ConfigShared::get_option(Slice name) const { return config_pmc_->get(name.str()); } -FlatHashMap ConfigShared::get_options() const { +std::unordered_map ConfigShared::get_options() const { return config_pmc_->get_all(); } diff --git a/td/telegram/ConfigShared.h b/td/telegram/ConfigShared.h index 7352e9c03..33e4a66b3 100644 --- a/td/telegram/ConfigShared.h +++ b/td/telegram/ConfigShared.h @@ -9,10 +9,10 @@ #include "td/db/KeyValueSyncInterface.h" #include "td/utils/common.h" -#include "td/utils/FlatHashMap.h" #include "td/utils/Slice.h" #include +#include namespace td { @@ -42,7 +42,7 @@ class ConfigShared { string get_option(Slice name) const; - FlatHashMap get_options() const; + std::unordered_map get_options() const; bool get_option_boolean(Slice name, bool default_value = false) const; int64 get_option_integer(Slice name, int64 default_value = 0) const; diff --git a/tdactor/td/actor/impl/Scheduler-decl.h b/tdactor/td/actor/impl/Scheduler-decl.h index 297867b9c..8fb9292fc 100644 --- a/tdactor/td/actor/impl/Scheduler-decl.h +++ b/tdactor/td/actor/impl/Scheduler-decl.h @@ -11,6 +11,7 @@ #include "td/actor/impl/EventFull-decl.h" #include "td/utils/Closure.h" +#include "td/utils/FlatHashMap.h" #include "td/utils/Heap.h" #include "td/utils/List.h" #include "td/utils/logging.h" @@ -28,7 +29,6 @@ #include #include #include -#include #include namespace td { @@ -210,7 +210,7 @@ class Scheduler { ListNode ready_actors_list_; KHeap timeout_queue_; - std::unordered_map> pending_events_; + FlatHashMap> pending_events_; ServiceActor service_actor_; Poll poll_; diff --git a/tddb/td/db/BinlogKeyValue.h b/tddb/td/db/BinlogKeyValue.h index 8aea80f58..8ab2cc463 100644 --- a/tddb/td/db/BinlogKeyValue.h +++ b/tddb/td/db/BinlogKeyValue.h @@ -15,7 +15,6 @@ #include "td/utils/buffer.h" #include "td/utils/common.h" -#include "td/utils/FlatHashMap.h" #include "td/utils/logging.h" #include "td/utils/misc.h" #include "td/utils/port/RwMutex.h" @@ -193,29 +192,29 @@ class BinlogKeyValue final : public KeyValueSyncInterface { binlog_->lazy_sync(std::move(promise)); } - FlatHashMap prefix_get(Slice prefix) final { + std::unordered_map prefix_get(Slice prefix) final { auto lock = rw_mutex_.lock_write().move_as_ok(); - FlatHashMap res; + std::unordered_map res; for (const auto &kv : map_) { if (begins_with(kv.first, prefix)) { - res[kv.first.substr(prefix.size())] = kv.second.first; + res.emplace(kv.first.substr(prefix.size()), kv.second.first); } } return res; } - FlatHashMap get_all() final { + std::unordered_map get_all() final { auto lock = rw_mutex_.lock_write().move_as_ok(); - FlatHashMap res; + std::unordered_map res; for (const auto &kv : map_) { - res[kv.first] = kv.second.first; + res.emplace(kv.first, kv.second.first); } return res; } void erase_by_prefix(Slice prefix) final { auto lock = rw_mutex_.lock_write().move_as_ok(); - std::vector ids; + vector ids; for (auto it = map_.begin(); it != map_.end();) { if (begins_with(it->first, prefix)) { ids.push_back(it->second.second); diff --git a/tddb/td/db/KeyValueSyncInterface.h b/tddb/td/db/KeyValueSyncInterface.h index 197536ccc..7aa553684 100644 --- a/tddb/td/db/KeyValueSyncInterface.h +++ b/tddb/td/db/KeyValueSyncInterface.h @@ -9,9 +9,10 @@ #include "td/actor/PromiseFuture.h" #include "td/utils/common.h" -#include "td/utils/FlatHashMap.h" #include "td/utils/Slice.h" +#include + namespace td { class KeyValueSyncInterface { @@ -33,9 +34,9 @@ class KeyValueSyncInterface { virtual string get(const string &key) = 0; - virtual FlatHashMap prefix_get(Slice prefix) = 0; + virtual std::unordered_map prefix_get(Slice prefix) = 0; - virtual FlatHashMap get_all() = 0; + virtual std::unordered_map get_all() = 0; virtual SeqNo erase(const string &key) = 0; diff --git a/tdnet/td/net/GetHostByNameActor.cpp b/tdnet/td/net/GetHostByNameActor.cpp index c187c710e..6a46b7550 100644 --- a/tdnet/td/net/GetHostByNameActor.cpp +++ b/tdnet/td/net/GetHostByNameActor.cpp @@ -121,15 +121,14 @@ GetHostByNameActor::GetHostByNameActor(Options options) : options_(std::move(opt } void GetHostByNameActor::run(string host, int port, bool prefer_ipv6, Promise promise) { - if (host.empty()) { - return promise.set_error(Status::Error("Host is empty")); - } - auto r_ascii_host = idn_to_ascii(host); if (r_ascii_host.is_error()) { return promise.set_error(r_ascii_host.move_as_error()); } auto ascii_host = r_ascii_host.move_as_ok(); + if (ascii_host.empty()) { + return promise.set_error(Status::Error("Host is empty")); + } auto begin_time = Time::now(); auto &value = cache_[prefer_ipv6].emplace(ascii_host, Value{{}, begin_time - 1.0}).first->second; diff --git a/tdnet/td/net/GetHostByNameActor.h b/tdnet/td/net/GetHostByNameActor.h index dbc0c0173..346cfe2ee 100644 --- a/tdnet/td/net/GetHostByNameActor.h +++ b/tdnet/td/net/GetHostByNameActor.h @@ -9,11 +9,11 @@ #include "td/actor/actor.h" #include "td/actor/PromiseFuture.h" +#include "td/utils/FlatHashMap.h" #include "td/utils/logging.h" #include "td/utils/port/IPAddress.h" #include "td/utils/Status.h" -#include #include namespace td { @@ -56,7 +56,7 @@ class GetHostByNameActor final : public Actor { return result; } }; - std::unordered_map cache_[2]; + FlatHashMap cache_[2]; struct Query { ActorOwn<> query; @@ -65,7 +65,7 @@ class GetHostByNameActor final : public Actor { double begin_time = 0.0; std::vector>> promises; }; - std::unordered_map active_queries_[2]; + FlatHashMap active_queries_[2]; Options options_; diff --git a/tdnet/td/net/SslStream.cpp b/tdnet/td/net/SslStream.cpp index aa302e882..8cdf88b9c 100644 --- a/tdnet/td/net/SslStream.cpp +++ b/tdnet/td/net/SslStream.cpp @@ -9,6 +9,7 @@ #if !TD_EMSCRIPTEN #include "td/utils/common.h" #include "td/utils/crypto.h" +#include "td/utils/FlatHashMap.h" #include "td/utils/logging.h" #include "td/utils/misc.h" #include "td/utils/port/IPAddress.h" @@ -26,7 +27,6 @@ #include #include #include -#include #if TD_PORT_WINDOWS #include @@ -130,7 +130,7 @@ int verify_callback(int preverify_ok, X509_STORE_CTX *ctx) { static std::mutex warning_mutex; { std::lock_guard lock(warning_mutex); - static std::unordered_map next_warning_time; + static FlatHashMap next_warning_time; double &next = next_warning_time[warning]; if (next <= now) { next = now + 300; // one warning per 5 minutes diff --git a/tdutils/td/utils/OptionParser.cpp b/tdutils/td/utils/OptionParser.cpp index 82d6d033e..76571d495 100644 --- a/tdutils/td/utils/OptionParser.cpp +++ b/tdutils/td/utils/OptionParser.cpp @@ -6,6 +6,7 @@ // #include "td/utils/OptionParser.h" +#include "td/utils/FlatHashMap.h" #include "td/utils/logging.h" #include "td/utils/PathView.h" #include "td/utils/SliceBuilder.h" @@ -16,8 +17,6 @@ #endif #endif -#include - #if TD_PORT_WINDOWS #if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP) #include @@ -96,8 +95,8 @@ Result> OptionParser::run(int argc, char *argv[], int expected_no } Result> OptionParser::run_impl(int argc, char *argv[], int expected_non_option_count) { - std::unordered_map short_options; - std::unordered_map long_options; + FlatHashMap short_options; + FlatHashMap long_options; for (auto &opt : options_) { if (opt.short_key != '\0') { short_options[opt.short_key] = &opt; diff --git a/tdutils/td/utils/translit.cpp b/tdutils/td/utils/translit.cpp index 5ddeedb19..3b1fbfd62 100644 --- a/tdutils/td/utils/translit.cpp +++ b/tdutils/td/utils/translit.cpp @@ -7,17 +7,17 @@ #include "td/utils/translit.h" #include "td/utils/algorithm.h" +#include "td/utils/FlatHashMap.h" #include "td/utils/misc.h" #include "td/utils/utf8.h" #include -#include #include namespace td { -static const std::unordered_map &get_en_to_ru_simple_rules() { - static const std::unordered_map rules{ +static const FlatHashMap &get_en_to_ru_simple_rules() { + static const FlatHashMap rules{ {'a', "а"}, {'b', "б"}, {'c', "к"}, {'d', "д"}, {'e', "е"}, {'f', "ф"}, {'g', "г"}, {'h', "х"}, {'i', "и"}, {'j', "й"}, {'k', "к"}, {'l', "л"}, {'m', "м"}, {'n', "н"}, {'o', "о"}, {'p', "п"}, {'q', "к"}, {'r', "р"}, {'s', "с"}, {'t', "т"}, {'u', "у"}, {'v', "в"}, {'w', "в"}, {'x', "кс"}, {'y', "и"}, {'z', "з"}}; @@ -32,8 +32,8 @@ static const std::vector> &get_en_to_ru_complex_rules( return rules; } -static const std::unordered_map &get_ru_to_en_simple_rules() { - static const std::unordered_map rules{ +static const FlatHashMap &get_ru_to_en_simple_rules() { + static const FlatHashMap rules{ {0x430, "a"}, {0x431, "b"}, {0x432, "v"}, {0x433, "g"}, {0x434, "d"}, {0x435, "e"}, {0x451, "e"}, {0x436, "zh"}, {0x437, "z"}, {0x438, "i"}, {0x439, "y"}, {0x43a, "k"}, {0x43b, "l"}, {0x43c, "m"}, {0x43d, "n"}, {0x43e, "o"}, {0x43f, "p"}, {0x440, "r"}, {0x441, "s"}, {0x442, "t"}, {0x443, "u"}, @@ -49,8 +49,8 @@ static const std::vector> &get_ru_to_en_complex_rules( } static void add_word_transliterations(vector &result, Slice word, bool allow_partial, - const std::unordered_map &simple_rules, - const std::vector> &complex_rules) { + const FlatHashMap &simple_rules, + const vector> &complex_rules) { string s; auto pos = word.ubegin(); auto end = word.uend();