Minor improvements.
This commit is contained in:
parent
bcc2adeb47
commit
b62ced6d95
@ -5493,7 +5493,7 @@ std::pair<vector<UserId>, vector<int32>> ContactsManager::change_imported_contac
|
||||
vector<size_t> new_contacts_unique_id(contacts.size());
|
||||
vector<Contact> unique_new_contacts;
|
||||
unique_new_contacts.reserve(contacts.size());
|
||||
FlatHashMap<Contact, size_t, ContactHash, ContactEqual> different_new_contacts;
|
||||
std::unordered_map<Contact, size_t, ContactHash, ContactEqual> different_new_contacts;
|
||||
std::unordered_set<string> different_new_phone_numbers;
|
||||
size_t unique_size = 0;
|
||||
for (size_t i = 0; i < contacts.size(); i++) {
|
||||
|
@ -167,7 +167,7 @@ class SendVoteQuery final : public Td::ResultHandler {
|
||||
}
|
||||
|
||||
auto result = result_ptr.move_as_ok();
|
||||
LOG(INFO) << "Receive SendVoteQuery result: " << to_string(result);
|
||||
LOG(INFO) << "Receive result for SendVoteQuery: " << to_string(result);
|
||||
promise_.set_value(std::move(result));
|
||||
}
|
||||
|
||||
|
@ -203,6 +203,7 @@ set(TDUTILS_SOURCE
|
||||
td/utils/FileLog.h
|
||||
td/utils/filesystem.h
|
||||
td/utils/find_boundary.h
|
||||
td/utils/FlatHashMap.h
|
||||
td/utils/FloodControlFast.h
|
||||
td/utils/FloodControlStrict.h
|
||||
td/utils/format.h
|
||||
|
@ -237,7 +237,7 @@ class ChainScheduler final : public ChainSchedulerBase {
|
||||
vector<TaskId> to_start_;
|
||||
|
||||
void try_start_task_later(TaskId task_id) {
|
||||
LOG(DEBUG) << "Try to start later " << task_id;
|
||||
LOG(DEBUG) << "Start later " << task_id;
|
||||
to_start_.push_back(task_id);
|
||||
}
|
||||
|
||||
|
@ -1,8 +1,18 @@
|
||||
//
|
||||
// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2022
|
||||
//
|
||||
// Distributed under the Boost Software License, Version 1.0. (See accompanying
|
||||
// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
|
||||
//
|
||||
#pragma once
|
||||
|
||||
#include "td/utils/common.h"
|
||||
|
||||
#include <cstddef>
|
||||
#include <functional>
|
||||
#include <new>
|
||||
#include <unordered_map>
|
||||
#include <utility>
|
||||
#include <vector>
|
||||
|
||||
namespace td {
|
||||
|
||||
@ -27,10 +37,10 @@ class FlatHashMapImpl {
|
||||
second.~ValueT();
|
||||
}
|
||||
}
|
||||
Node(Node &&other) {
|
||||
Node(Node &&other) noexcept {
|
||||
*this = std::move(other);
|
||||
}
|
||||
Node &operator=(Node &&other) {
|
||||
Node &operator=(Node &&other) noexcept {
|
||||
DCHECK(empty());
|
||||
DCHECK(!other.empty());
|
||||
first = std::move(other.first);
|
||||
@ -62,7 +72,6 @@ class FlatHashMapImpl {
|
||||
|
||||
public:
|
||||
struct Iterator {
|
||||
public:
|
||||
using iterator_category = std::bidirectional_iterator_tag;
|
||||
using difference_type = std::ptrdiff_t;
|
||||
using value_type = Node;
|
||||
@ -110,7 +119,6 @@ class FlatHashMapImpl {
|
||||
Self *map_;
|
||||
};
|
||||
struct ConstIterator {
|
||||
public:
|
||||
using iterator_category = std::bidirectional_iterator_tag;
|
||||
using difference_type = std::ptrdiff_t;
|
||||
using value_type = Node;
|
||||
@ -165,10 +173,10 @@ class FlatHashMapImpl {
|
||||
using value_type = std::pair<const KeyT, ValueT>;
|
||||
|
||||
FlatHashMapImpl() = default;
|
||||
FlatHashMapImpl(FlatHashMapImpl &&other) : nodes_(std::move(other.nodes_)), used_nodes_(other.used_nodes_) {
|
||||
FlatHashMapImpl(FlatHashMapImpl &&other) noexcept : nodes_(std::move(other.nodes_)), used_nodes_(other.used_nodes_) {
|
||||
other.used_nodes_ = 0;
|
||||
}
|
||||
FlatHashMapImpl &operator=(FlatHashMapImpl &&other) {
|
||||
FlatHashMapImpl &operator=(FlatHashMapImpl &&other) noexcept {
|
||||
nodes_ = std::move(other.nodes_);
|
||||
used_nodes_ = other.used_nodes_;
|
||||
other.used_nodes_ = 0;
|
||||
@ -225,7 +233,7 @@ class FlatHashMapImpl {
|
||||
}
|
||||
auto it = nodes_.begin();
|
||||
while (it->empty()) {
|
||||
it++;
|
||||
++it;
|
||||
}
|
||||
return Iterator(it, this);
|
||||
}
|
||||
@ -238,7 +246,7 @@ class FlatHashMapImpl {
|
||||
}
|
||||
auto it = nodes_.begin();
|
||||
while (it->empty()) {
|
||||
it++;
|
||||
++it;
|
||||
}
|
||||
return ConstIterator(it, this);
|
||||
}
|
||||
@ -297,7 +305,7 @@ class FlatHashMapImpl {
|
||||
DCHECK(!is_key_empty(it->key()));
|
||||
size_t empty_i = it.it_ - nodes_.begin();
|
||||
auto empty_bucket = empty_i;
|
||||
DCHECK(0 <= empty_i < nodes_.size());
|
||||
DCHECK(0 <= empty_i && empty_i < nodes_.size());
|
||||
nodes_[empty_bucket].clear();
|
||||
used_nodes_--;
|
||||
|
||||
@ -364,12 +372,15 @@ class FlatHashMapImpl {
|
||||
if (is_key_empty(node.key())) {
|
||||
continue;
|
||||
}
|
||||
*find_bucket_for_insert(node.key()) = std::move(node);
|
||||
auto new_node = find_bucket_for_insert(node.key());
|
||||
*new_node = std::move(node);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
//template <class KeyT, class ValueT, class HashT = std::hash<KeyT>, class EqualT = std::equal_to<KeyT>>
|
||||
//using FlatHashMap = FlatHashMapImpl<KeyT, ValueT, HashT, EqualT>;
|
||||
|
||||
template <class KeyT, class ValueT, class HashT = std::hash<KeyT>, class EqualT = std::equal_to<KeyT>>
|
||||
using FlatHashMap = std::unordered_map<KeyT, ValueT, HashT, EqualT>;
|
||||
|
||||
|
@ -1,7 +1,14 @@
|
||||
//
|
||||
// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2022
|
||||
//
|
||||
// Distributed under the Boost Software License, Version 1.0. (See accompanying
|
||||
// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
|
||||
//
|
||||
#include "td/utils/common.h"
|
||||
#include "td/utils/FlatHashMap.h"
|
||||
#include "td/utils/tests.h"
|
||||
|
||||
#include <array>
|
||||
#include <string>
|
||||
|
||||
TEST(FlatHashMap, basic) {
|
||||
td::FlatHashMap<int, int> map;
|
||||
@ -18,7 +25,7 @@ TEST(FlatHashMap, basic) {
|
||||
map.erase(map.find(1));
|
||||
auto map_copy = map;
|
||||
|
||||
td::FlatHashMap<int, std::array<std::unique_ptr<std::string>, 20>> x;
|
||||
td::FlatHashMap<int, std::array<td::unique_ptr<td::string>, 20>> x;
|
||||
auto y = std::move(x);
|
||||
x[12];
|
||||
x.erase(x.find(12));
|
||||
|
Loading…
Reference in New Issue
Block a user