Optimize NotificationManager::get_group.
GitOrigin-RevId: 0b0ae8d0ad274b1c91868943449d09e17aff25f7
This commit is contained in:
parent
7ce70d8056
commit
7bdad0c877
@ -156,15 +156,15 @@ void NotificationManager::tear_down() {
|
|||||||
|
|
||||||
NotificationManager::NotificationGroups::iterator NotificationManager::add_group(NotificationGroupKey &&group_key,
|
NotificationManager::NotificationGroups::iterator NotificationManager::add_group(NotificationGroupKey &&group_key,
|
||||||
NotificationGroup &&group) {
|
NotificationGroup &&group) {
|
||||||
|
bool is_inserted = group_keys_.emplace(group_key.group_id, group_key).second;
|
||||||
|
CHECK(is_inserted);
|
||||||
return groups_.emplace(std::move(group_key), std::move(group)).first;
|
return groups_.emplace(std::move(group_key), std::move(group)).first;
|
||||||
}
|
}
|
||||||
|
|
||||||
NotificationManager::NotificationGroups::iterator NotificationManager::get_group(NotificationGroupId group_id) {
|
NotificationManager::NotificationGroups::iterator NotificationManager::get_group(NotificationGroupId group_id) {
|
||||||
// TODO optimize
|
auto group_keys_it = group_keys_.find(group_id);
|
||||||
for (auto it = groups_.begin(); it != groups_.end(); ++it) {
|
if (group_keys_it != group_keys_.end()) {
|
||||||
if (it->first.group_id == group_id) {
|
return groups_.find(group_keys_it->second);
|
||||||
return it;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
return groups_.end();
|
return groups_.end();
|
||||||
}
|
}
|
||||||
@ -207,6 +207,8 @@ NotificationManager::NotificationGroups::iterator NotificationManager::get_group
|
|||||||
}
|
}
|
||||||
|
|
||||||
void NotificationManager::delete_group(NotificationGroups::iterator &&group_it) {
|
void NotificationManager::delete_group(NotificationGroups::iterator &&group_it) {
|
||||||
|
bool is_erased = group_keys_.erase(group_it->first.group_id);
|
||||||
|
CHECK(is_erased);
|
||||||
groups_.erase(group_it);
|
groups_.erase(group_it);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -186,6 +186,7 @@ class NotificationManager : public Actor {
|
|||||||
std::unordered_set<int32> running_get_chat_difference_;
|
std::unordered_set<int32> running_get_chat_difference_;
|
||||||
|
|
||||||
NotificationGroups groups_;
|
NotificationGroups groups_;
|
||||||
|
std::unordered_map<NotificationGroupId, NotificationGroupKey, NotificationGroupIdHash> group_keys_;
|
||||||
|
|
||||||
std::unordered_map<int32, vector<td_api::object_ptr<td_api::Update>>> pending_updates_;
|
std::unordered_map<int32, vector<td_api::object_ptr<td_api::Update>>> pending_updates_;
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user