From 5491cc3940fd1c2e1e37798586c09421a229576a Mon Sep 17 00:00:00 2001 From: levlam Date: Tue, 22 Nov 2022 12:23:58 +0300 Subject: [PATCH] Store polls in a WaitFreeHashMap. --- td/telegram/PollManager.cpp | 29 +++++++++-------------------- td/telegram/PollManager.h | 3 ++- 2 files changed, 11 insertions(+), 21 deletions(-) diff --git a/td/telegram/PollManager.cpp b/td/telegram/PollManager.cpp index 24fbd58ad..2562b7e83 100644 --- a/td/telegram/PollManager.cpp +++ b/td/telegram/PollManager.cpp @@ -301,32 +301,23 @@ bool PollManager::is_local_poll_id(PollId poll_id) { } const PollManager::Poll *PollManager::get_poll(PollId poll_id) const { - auto p = polls_.find(poll_id); - if (p == polls_.end()) { - return nullptr; - } else { - return p->second.get(); - } + return polls_.get_pointer(poll_id); } const PollManager::Poll *PollManager::get_poll(PollId poll_id) { - auto p = polls_.find(poll_id); - if (p == polls_.end()) { - return nullptr; - } else { + auto p = polls_.get_pointer(poll_id); + if (p != nullptr) { schedule_poll_unload(poll_id); - return p->second.get(); } + return p; } PollManager::Poll *PollManager::get_poll_editable(PollId poll_id) { - auto p = polls_.find(poll_id); - if (p == polls_.end()) { - return nullptr; - } else { + auto p = polls_.get_pointer(poll_id); + if (p != nullptr) { schedule_poll_unload(poll_id); - return p->second.get(); } + return p; } bool PollManager::have_poll(PollId poll_id) const { @@ -649,8 +640,7 @@ PollId PollManager::create_poll(string &&question, vector &&options, boo PollId poll_id(--current_local_poll_id_); CHECK(is_local_poll_id(poll_id)); - bool is_inserted = polls_.emplace(poll_id, std::move(poll)).second; - CHECK(is_inserted); + polls_.set(poll_id, std::move(poll)); return poll_id; } @@ -1523,8 +1513,7 @@ PollId PollManager::on_get_poll(PollId poll_id, tl_object_ptr(); poll = p.get(); - bool is_inserted = polls_.emplace(poll_id, std::move(p)).second; - CHECK(is_inserted); + polls_.set(poll_id, std::move(p)); } CHECK(poll != nullptr); diff --git a/td/telegram/PollManager.h b/td/telegram/PollManager.h index 0290122ec..9b318bec6 100644 --- a/td/telegram/PollManager.h +++ b/td/telegram/PollManager.h @@ -24,6 +24,7 @@ #include "td/utils/FlatHashSet.h" #include "td/utils/Promise.h" #include "td/utils/Status.h" +#include "td/utils/WaitFreeHashMap.h" #include @@ -224,7 +225,7 @@ class PollManager final : public Actor { Td *td_; ActorShared<> parent_; - FlatHashMap, PollIdHash> polls_; + WaitFreeHashMap, PollIdHash> polls_; FlatHashMap, PollIdHash> server_poll_messages_; FlatHashMap, PollIdHash> other_poll_messages_;