diff --git a/td/telegram/net/DcOptionsSet.cpp b/td/telegram/net/DcOptionsSet.cpp index 9f2c5dc76..5ca5d44e1 100644 --- a/td/telegram/net/DcOptionsSet.cpp +++ b/td/telegram/net/DcOptionsSet.cpp @@ -23,7 +23,7 @@ namespace td { void DcOptionsSet::add_dc_options(DcOptions dc_options) { - std::vector new_ordered_options; + vector new_ordered_options; for (auto &option : dc_options.dc_options) { auto *info = register_dc_option(std::move(option)); new_ordered_options.push_back(DcOptionId{info->pos}); @@ -55,8 +55,8 @@ vector DcOptionsSet::find_all_connections(DcId dc_ bool only_http) { LOG(DEBUG) << "Find all " << (allow_media_only ? "media " : "") << "connections in " << dc_id << ". use_static = " << use_static << ", prefer_ipv6 = " << prefer_ipv6 << ", only_http = " << only_http; - std::vector options; - std::vector static_options; + vector options; + vector static_options; if (prefer_ipv6) { use_static = false; @@ -188,15 +188,19 @@ DcOptionsSet::DcOptionInfo *DcOptionsSet::register_dc_option(DcOption &&option) void DcOptionsSet::init_option_stat(DcOptionInfo *option_info) { const auto &ip_address = option_info->option.get_ip_address(); - auto it_ok = option_to_stat_id_.emplace(ip_address, 0); - if (it_ok.second) { - it_ok.first->second = option_stats_.create(make_unique()); + for (size_t i = 0; i < option_stats_.size(); i++) { + if (option_stats_[i].first == ip_address) { + option_info->stat_id = i; + return; + } } - option_info->stat_id = it_ok.first->second; + option_stats_.emplace_back(ip_address, make_unique()); + option_info->stat_id = option_stats_.size() - 1; } DcOptionsSet::OptionStat *DcOptionsSet::get_option_stat(const DcOptionInfo *option_info) { - return option_stats_.get(option_info->stat_id)->get(); + CHECK(option_info->stat_id < option_stats_.size()); + return option_stats_[option_info->stat_id].second.get(); } } // namespace td diff --git a/td/telegram/net/DcOptionsSet.h b/td/telegram/net/DcOptionsSet.h index b474096d5..e29bf84e3 100644 --- a/td/telegram/net/DcOptionsSet.h +++ b/td/telegram/net/DcOptionsSet.h @@ -10,12 +10,11 @@ #include "td/telegram/net/DcOptions.h" #include "td/utils/common.h" -#include "td/utils/Container.h" #include "td/utils/port/IPAddress.h" #include "td/utils/Status.h" #include "td/utils/Time.h" -#include +#include namespace td { @@ -79,8 +78,8 @@ class DcOptionsSet { struct DcOptionInfo { DcOption option; - int64 stat_id = -1; - size_t pos; + size_t stat_id = static_cast(-1); + size_t pos = 0; size_t order = 0; DcOptionInfo(DcOption &&option, size_t pos) : option(std::move(option)), pos(pos) { @@ -88,7 +87,7 @@ class DcOptionsSet { }; struct DcOptionId { - size_t pos; + size_t pos = 0; auto as_tie() const { return pos; } @@ -100,10 +99,9 @@ class DcOptionsSet { } }; - std::vector> options_; - std::vector ordered_options_; - std::map option_to_stat_id_; - Container> option_stats_; + vector> options_; + vector ordered_options_; + vector>> option_stats_; DcOptionInfo *register_dc_option(DcOption &&option); void init_option_stat(DcOptionInfo *option_info);