From acf30d3700c167dee56e78774d436d7bd92e6c10 Mon Sep 17 00:00:00 2001 From: levlam Date: Fri, 11 Mar 2022 13:34:36 +0300 Subject: [PATCH] Fix HashTable::operator->. --- tdutils/td/utils/FlatHashMapChunks.h | 2 +- tdutils/td/utils/FlatHashTable.h | 2 +- tdutils/test/HashSet.cpp | 23 +++++++++++++++++++++++ 3 files changed, 25 insertions(+), 2 deletions(-) diff --git a/tdutils/td/utils/FlatHashMapChunks.h b/tdutils/td/utils/FlatHashMapChunks.h index c5bf6e8f7..81a2c4819 100644 --- a/tdutils/td/utils/FlatHashMapChunks.h +++ b/tdutils/td/utils/FlatHashMapChunks.h @@ -156,7 +156,7 @@ class FlatHashTableChunks { return it_->get_public(); } pointer operator->() { - return &*it_; + return &it_->get_public(); } bool operator==(const Iterator &other) const { DCHECK(map_ == other.map_); diff --git a/tdutils/td/utils/FlatHashTable.h b/tdutils/td/utils/FlatHashTable.h index 0fa1e51d4..40c610d51 100644 --- a/tdutils/td/utils/FlatHashTable.h +++ b/tdutils/td/utils/FlatHashTable.h @@ -71,7 +71,7 @@ class FlatHashTable { return it_->get_public(); } pointer operator->() { - return &*it_; + return &it_->get_public(); } NodeT *get() { return it_; diff --git a/tdutils/test/HashSet.cpp b/tdutils/test/HashSet.cpp index dd3518507..96b0a3efe 100644 --- a/tdutils/test/HashSet.cpp +++ b/tdutils/test/HashSet.cpp @@ -77,6 +77,29 @@ TEST(FlatHashMap, probing) { test(8192, static_cast(8192 * 0.3)); } +struct A { + int a; +}; + +struct AHash { + std::size_t operator()(A a) const { + return std::hash()(a.a); + } +}; + +static bool operator==(const A &lhs, const A &rhs) { + return lhs.a == rhs.a; +} + +TEST(FlatHashSet, foreach) { + td::FlatHashSet s; + for (auto it : s) { + LOG(ERROR) << it.a; + } + s.insert({1}); + LOG(INFO) << s.begin()->a; +} + TEST(FlatHashSet, TL) { td::FlatHashSet s; int N = 100000;