From 524b2d7fdd38a2f11a0cba5b9b07dff470030d7b Mon Sep 17 00:00:00 2001 From: Vlad Dobromyslov Date: Thu, 17 Mar 2022 11:24:15 +0300 Subject: [PATCH] #319 - get_votes fix sidechain_type as map --- libraries/app/database_api.cpp | 43 +++++++++++++++++++--------------- 1 file changed, 24 insertions(+), 19 deletions(-) diff --git a/libraries/app/database_api.cpp b/libraries/app/database_api.cpp index c3d45f9a..c66d831e 100644 --- a/libraries/app/database_api.cpp +++ b/libraries/app/database_api.cpp @@ -2138,13 +2138,22 @@ vector database_api_impl::get_votes_ids(const string &account_name votes_info database_api_impl::get_votes(const string &account_name_or_id) const { votes_info result; - const auto &votes_ids = get_votes_ids(account_name_or_id); - const auto &committee_ids = get_votes_objects(votes_ids); - const auto &witness_ids = get_votes_objects(votes_ids); - const auto &for_worker_ids = get_votes_objects(votes_ids); - const auto &against_worker_ids = get_votes_objects(votes_ids); - const auto &son_bitcoin_ids = get_votes_objects(votes_ids, 5); - const auto &son_hive_ids = get_votes_objects(votes_ids, 5); + const auto votes_ids = get_votes_ids(account_name_or_id); + const auto committee_ids = get_votes_objects(votes_ids); + const auto witness_ids = get_votes_objects(votes_ids); + const auto for_worker_ids = get_votes_objects(votes_ids); + const auto against_worker_ids = get_votes_objects(votes_ids); + const auto son_ids = [this, &votes_ids]() + { + flat_map > son_ids; + const auto son_bitcoin_ids = get_votes_objects(votes_ids, 5); + if (!son_bitcoin_ids.empty()) + son_ids[sidechain_type::bitcoin] = std::move(son_bitcoin_ids); + const auto son_hive_ids = get_votes_objects(votes_ids, 5); + if (!son_hive_ids.empty()) + son_ids[sidechain_type::hive] = std::move(son_hive_ids); + return son_ids; + }(); //! Fill votes info if (!committee_ids.empty()) { @@ -2187,20 +2196,16 @@ votes_info database_api_impl::get_votes(const string &account_name_or_id) const result.votes_against_workers = std::move(votes_against_workers); } - if (!son_bitcoin_ids.empty() || !son_hive_ids.empty()) { + if (!son_ids.empty()) { flat_map > votes_for_sons; - if(!son_bitcoin_ids.empty()) { - votes_for_sons[sidechain_type::bitcoin].reserve(son_bitcoin_ids.size()); - for (const auto &son : son_bitcoin_ids) { + for(const auto& son_sidechain_ids : son_ids) + { + const auto& sidechain = son_sidechain_ids.first; + const auto& sidechain_ids = son_sidechain_ids.second; + votes_for_sons[sidechain].reserve(sidechain_ids.size()); + for (const auto &son : sidechain_ids) { const auto &son_obj = son.as(6); - votes_for_sons[sidechain_type::bitcoin].emplace_back(votes_info_object{son_obj.get_bitcoin_vote_id(), son_obj.id}); - } - } - if(!son_hive_ids.empty()) { - votes_for_sons[sidechain_type::hive].reserve(son_hive_ids.size()); - for (const auto &son : son_hive_ids) { - const auto &son_obj = son.as(6); - votes_for_sons[sidechain_type::hive].emplace_back(votes_info_object{son_obj.get_hive_vote_id(), son_obj.id}); + votes_for_sons[sidechain].emplace_back(votes_info_object{son_obj.get_sidechain_vote_id(sidechain), son_obj.id}); } } result.votes_for_sons = std::move(votes_for_sons);