From 8846f8b57e53276687955562f58d2bfdbf63b3a9 Mon Sep 17 00:00:00 2001 From: Janusz Sobczak Date: Tue, 19 Sep 2023 13:11:50 -0700 Subject: [PATCH] Migrate to AnyInvocable in data/ PiperOrigin-RevId: 566721712 --- internal/data/BUILD | 1 + internal/data/data_set.h | 12 ++++++---- internal/data/leveldb_data_set.h | 32 ++++++++++++++------------ internal/data/memory_data_set.h | 23 +++++++++++-------- internal/test/fake_data_set.h | 39 ++++++++++++++++---------------- 5 files changed, 58 insertions(+), 49 deletions(-) diff --git a/internal/data/BUILD b/internal/data/BUILD index 8628ea53..dce7d36c 100644 --- a/internal/data/BUILD +++ b/internal/data/BUILD @@ -21,6 +21,7 @@ cc_library( "//third_party/leveldb:util", "//third_party/protobuf:protobuf_lite", "@com_google_absl//absl/container:flat_hash_map", + "@com_google_absl//absl/functional:any_invocable", "@com_google_absl//absl/strings", "@com_google_absl//absl/synchronization", ], diff --git a/internal/data/data_set.h b/internal/data/data_set.h index c87492a4..65ce127d 100644 --- a/internal/data/data_set.h +++ b/internal/data/data_set.h @@ -15,12 +15,13 @@ #ifndef THIRD_PARTY_NEARBY_INTERNAL_DATA_DATA_SET_H_ #define THIRD_PARTY_NEARBY_INTERNAL_DATA_DATA_SET_H_ -#include #include #include #include #include +#include "absl/functional/any_invocable.h" + namespace nearby { namespace data { @@ -43,12 +44,13 @@ class DataSet { // Asynchronously initializes the object, which must have been created by the // DataManager::GetDataSet function. |callback| will be invoked on the // calling thread when complete. - virtual void Initialize(std::function callback) = 0; + virtual void Initialize(absl::AnyInvocable callback) = 0; // Asynchronously loads all entries from the database and invokes |callback| // when complete. virtual void LoadEntries( - std::function>)> callback) = 0; + absl::AnyInvocable>) &&> + callback) = 0; // Asynchronously saves |entries_to_save| and deletes entries from // |keys_to_remove| from the database. |callback| will be invoked on the @@ -57,11 +59,11 @@ class DataSet { virtual void UpdateEntries( std::unique_ptr entries_to_save, std::unique_ptr> keys_to_remove, - std::function callback) = 0; + absl::AnyInvocable callback) = 0; // Asynchronously destroys the database. Use this call only if the database // needs to be destroyed for this particular profile. - virtual void Destroy(std::function callback) = 0; + virtual void Destroy(absl::AnyInvocable callback) = 0; }; } // namespace data diff --git a/internal/data/leveldb_data_set.h b/internal/data/leveldb_data_set.h index c55a57bc..5ad4648c 100644 --- a/internal/data/leveldb_data_set.h +++ b/internal/data/leveldb_data_set.h @@ -15,14 +15,13 @@ #ifndef THIRD_PARTY_NEARBY_INTERNAL_DATA_LEVELDB_DATA_SET_H_ #define THIRD_PARTY_NEARBY_INTERNAL_DATA_LEVELDB_DATA_SET_H_ -#include #include -#include #include #include #include #include +#include "absl/functional/any_invocable.h" #include "absl/strings/string_view.h" #include "third_party/leveldb/include/db.h" #include "third_party/leveldb/include/iterator.h" @@ -47,17 +46,19 @@ class LeveldbDataSet : public DataSet { explicit LeveldbDataSet(absl::string_view path) : path_(path) {} ~LeveldbDataSet() override = default; - void Initialize(std::function callback) override; - void LoadEntries(std::function>)> - callback) override; + void Initialize(absl::AnyInvocable callback) override; + void LoadEntries( + absl::AnyInvocable>) &&> + callback) override; void LoadEntriesWithKeys( - std::function< - void(bool, std::unique_ptr>>)> + absl::AnyInvocable< + void(bool, + std::unique_ptr>>) &&> callback); void UpdateEntries(std::unique_ptr entries_to_save, std::unique_ptr> keys_to_remove, - std::function callback) override; - void Destroy(std::function callback) override; + absl::AnyInvocable callback) override; + void Destroy(absl::AnyInvocable callback) override; private: void Serialize(T const& value, std::string& str); @@ -73,7 +74,7 @@ template ::value, bool> isMessageLite> void LeveldbDataSet::Initialize( - std::function callback) { + absl::AnyInvocable callback) { leveldb::Options options; options.create_if_missing = true; @@ -99,7 +100,8 @@ template ::value, bool> isMessageLite> void LeveldbDataSet::LoadEntries( - std::function>)> callback) { + absl::AnyInvocable>) &&> + callback) { auto result = std::make_unique>(); if (status_ != InitStatus::kOK) { std::move(callback)(false, std::move(result)); @@ -130,8 +132,8 @@ template ::value, bool> isMessageLite> void LeveldbDataSet::LoadEntriesWithKeys( - std::function>>)> + absl::AnyInvocable< + void(bool, std::unique_ptr>>) &&> callback) { auto result = std::make_unique>>(); if (status_ != InitStatus::kOK) { @@ -165,7 +167,7 @@ template ::UpdateEntries( std::unique_ptr entries_to_save, std::unique_ptr> keys_to_remove, - std::function callback) { + absl::AnyInvocable callback) { NEARBY_LOGS(INFO) << "UpdateEntries is called."; if (status_ != InitStatus::kOK) { std::move(callback)(false); @@ -193,7 +195,7 @@ template ::value, bool> isMessageLite> void LeveldbDataSet::Destroy( - std::function callback) { + absl::AnyInvocable callback) { NEARBY_LOGS(INFO) << "Destroy is called."; db_.reset(); leveldb::DestroyDB(path_, leveldb::Options()); diff --git a/internal/data/memory_data_set.h b/internal/data/memory_data_set.h index 48074573..9cf5fca2 100644 --- a/internal/data/memory_data_set.h +++ b/internal/data/memory_data_set.h @@ -15,13 +15,13 @@ #ifndef THIRD_PARTY_NEARBY_INTERNAL_DATA_MEMORY_DATA_SET_H_ #define THIRD_PARTY_NEARBY_INTERNAL_DATA_MEMORY_DATA_SET_H_ -#include #include #include #include #include #include "absl/container/flat_hash_map.h" +#include "absl/functional/any_invocable.h" #include "absl/strings/string_view.h" #include "absl/synchronization/mutex.h" #include "internal/data/data_set.h" @@ -37,13 +37,14 @@ class MemoryDataSet : public DataSet { explicit MemoryDataSet(absl::string_view path) : path_(path) {} ~MemoryDataSet() override = default; - void Initialize(std::function callback) override; - void LoadEntries(std::function>)> - callback) override; + void Initialize(absl::AnyInvocable callback) override; + void LoadEntries( + absl::AnyInvocable>) &&> + callback) override; void UpdateEntries(std::unique_ptr entries_to_save, std::unique_ptr> keys_to_remove, - std::function callback) override; - void Destroy(std::function callback) override; + absl::AnyInvocable callback) override; + void Destroy(absl::AnyInvocable callback) override; private: std::string path_; @@ -53,13 +54,15 @@ class MemoryDataSet : public DataSet { }; template -void MemoryDataSet::Initialize(std::function callback) { +void MemoryDataSet::Initialize( + absl::AnyInvocable callback) { std::move(callback)(InitStatus::kOK); } template void MemoryDataSet::LoadEntries( - std::function>)> callback) { + absl::AnyInvocable>) &&> + callback) { auto result = std::make_unique>(); auto it = entries_.begin(); while (it != entries_.end()) { @@ -74,7 +77,7 @@ template void MemoryDataSet::UpdateEntries( std::unique_ptr entries_to_save, std::unique_ptr> keys_to_remove, - std::function callback) { + absl::AnyInvocable callback) { if (entries_to_save != nullptr) { auto it = entries_to_save->begin(); while (it != entries_to_save->end()) { @@ -95,7 +98,7 @@ void MemoryDataSet::UpdateEntries( } template -void MemoryDataSet::Destroy(std::function callback) { +void MemoryDataSet::Destroy(absl::AnyInvocable callback) { entries_.clear(); std::move(callback)(true); } diff --git a/internal/test/fake_data_set.h b/internal/test/fake_data_set.h index 7393abda..43494207 100644 --- a/internal/test/fake_data_set.h +++ b/internal/test/fake_data_set.h @@ -22,6 +22,7 @@ #include #include "absl/container/flat_hash_map.h" +#include "absl/functional/any_invocable.h" #include "internal/data/data_set.h" namespace nearby { @@ -35,41 +36,42 @@ class FakeDataSet : public DataSet { explicit FakeDataSet(const absl::flat_hash_map& entries_map) : entries_map_(entries_map) {} - void Initialize(std::function callback) override { + void Initialize(absl::AnyInvocable callback) override { init_callback_ = std::move(callback); } - void LoadEntries(std::function>)> - callback) override { + void LoadEntries( + absl::AnyInvocable>) &&> + callback) override { load_callback_ = std::move(callback); } void UpdateEntries(std::unique_ptr entries_to_save, std::unique_ptr> keys_to_remove, - std::function callback) override { + absl::AnyInvocable callback) override { entries_to_save_ = std::move(entries_to_save); keys_to_remove_ = std::move(keys_to_remove); update_callback_ = std::move(callback); } - void Destroy(std::function callback) override { + void Destroy(absl::AnyInvocable callback) override { destroy_callback_ = std::move(callback); } // Mocked methods void InitStatusCallback(InitStatus status) { - if (init_callback_ != nullptr) { - init_callback_(status); + if (auto callback = std::move(init_callback_)) { + std::move(callback)(status); } } void LoadCallback(bool success) { - if (load_callback_ != nullptr) { + if (auto callback = std::move(load_callback_)) { auto entries = std::make_unique>(); for (auto it = entries_map_.begin(); it != entries_map_.end(); ++it) { entries->push_back(it->second); } - load_callback_(success, std::move(entries)); + std::move(callback)(success, std::move(entries)); } } @@ -97,8 +99,8 @@ class FakeDataSet : public DataSet { entries_to_save_ = nullptr; keys_to_remove_ = nullptr; - if (update_callback_ != nullptr) { - update_callback_(success); + if (auto callback = std::move(update_callback_)) { + std::move(callback)(success); } } @@ -106,9 +108,8 @@ class FakeDataSet : public DataSet { if (success) { entries_map_.clear(); } - - if (destroy_callback_ != nullptr) { - destroy_callback_(success); + if (auto callback = std::move(destroy_callback_)) { + std::move(callback)(success); } } @@ -116,13 +117,13 @@ class FakeDataSet : public DataSet { private: absl::flat_hash_map entries_map_ = nullptr; - std::function init_callback_ = nullptr; - std::function>)> load_callback_ = - nullptr; + absl::AnyInvocable init_callback_ = nullptr; + absl::AnyInvocable>) &&> + load_callback_ = nullptr; std::unique_ptr entries_to_save_ = nullptr; std::unique_ptr> keys_to_remove_ = nullptr; - std::function update_callback_ = nullptr; - std::function destroy_callback_ = nullptr; + absl::AnyInvocable update_callback_ = nullptr; + absl::AnyInvocable destroy_callback_ = nullptr; }; } // namespace data