From 2be2826f3c06c96e330ad29c6a30ab8c2c03b470 Mon Sep 17 00:00:00 2001 From: Fabian Schuh Date: Wed, 11 Apr 2018 15:16:51 +0200 Subject: [PATCH] [pending] use map instead of vector --- libraries/app/api.cpp | 25 ++++++---------------- libraries/app/include/graphene/app/api.hpp | 4 ++-- 2 files changed, 9 insertions(+), 20 deletions(-) diff --git a/libraries/app/api.cpp b/libraries/app/api.cpp index 9bb00872..d80a8c00 100644 --- a/libraries/app/api.cpp +++ b/libraries/app/api.cpp @@ -44,18 +44,6 @@ namespace graphene { namespace app { -namespace { - - std::vector::const_iterator find_transaction( const std::vector& transactions, const transaction& transaction_to_find ) - { - auto transaction_it = std::find_if(transactions.begin(), transactions.end(), - [&]( const signed_transaction& transaction ){ - return transaction.id() == transaction_to_find.id(); - }); - return transaction_it; - } -} - login_api::login_api(application& a) :_app(a) { @@ -206,10 +194,11 @@ namespace { network_node_api::network_node_api( application& a ) : _app( a ) { _pending_trx_connection = _app.chain_database()->on_pending_transaction.connect([this]( const signed_transaction& transaction ){ - auto transaction_it = find_transaction(_pending_transactions, transaction); + + auto transaction_it = _pending_transactions.find(transaction.id()); if (_pending_transactions.end() == transaction_it) { - _pending_transactions.push_back(transaction); + _pending_transactions[transaction.id()] = transaction; } if (_on_pending_transaction) @@ -221,7 +210,7 @@ namespace { _applied_block_connection = _app.chain_database()->applied_block.connect([this]( const signed_block& block ){ for (const auto& transaction: block.transactions) { - auto transaction_it = find_transaction(_pending_transactions, transaction); + auto transaction_it = _pending_transactions.find(transaction.id()); if (_pending_transactions.end() != transaction_it) { _pending_transactions.erase(transaction_it); @@ -233,9 +222,9 @@ namespace { */ for (const auto& transaction: _pending_transactions) { - if (transaction.expiration < block.timestamp) + if (transaction.second.expiration < block.timestamp) { - auto transaction_it = find_transaction(_pending_transactions, transaction); + auto transaction_it = _pending_transactions.find(transaction.second.id()); if (_pending_transactions.end() != transaction_it) { _pending_transactions.erase(transaction_it); @@ -277,7 +266,7 @@ namespace { return _app.p2p_node()->set_advanced_node_parameters(params); } - std::vector network_node_api::list_pending_transactions() const + map network_node_api::list_pending_transactions() const { return _pending_transactions; } diff --git a/libraries/app/include/graphene/app/api.hpp b/libraries/app/include/graphene/app/api.hpp index aa28fd6f..7aaf06fa 100644 --- a/libraries/app/include/graphene/app/api.hpp +++ b/libraries/app/include/graphene/app/api.hpp @@ -267,7 +267,7 @@ namespace graphene { namespace app { /** * @brief Return list of pending transactions. */ - std::vector list_pending_transactions() const; + map list_pending_transactions() const; /** * @brief Subscribes caller for notifications about pending transactions. @@ -282,7 +282,7 @@ namespace graphene { namespace app { private: application& _app; - std::vector< signed_transaction > _pending_transactions; + map _pending_transactions; boost::signals2::scoped_connection _pending_trx_connection; boost::signals2::scoped_connection _applied_block_connection; std::function _on_pending_transaction;